Tôi tự hỏi cách sử dụng Awk để xử lý mỗi 2 dòng dữ liệu thay vì mỗi dòng. Theo mặc định, bộ tách bản ghi (RS) được đặt thành mọi dòng mới, làm thế nào tôi có thể thay đổi điều này thành 2 dòng.awk để thay đổi bộ tách bản ghi (RS) thành 2 dòng
Trả lời
Divide & Conquer: làm điều đó trong hai bước:
- sử dụng awk để giới thiệu dòng trống
để tách mỗi bản ghi hai dòng:NR%2==0 {print ""}
- ống đến một quá trình awk và
kỷ lục bộ dấu phân tách thành dòng trống:BEGIN {RS=""}
Lợi thế: Trongthứ hai Quy trìnhbạn có tất cả các trường của hai dòng có thể truy cập là $1 to $NF
.
awk '{print}; NR%2==0 {print ""}' data | \
awk 'BEGIN {RS=""}; {$1=$1;print}'
Lưu ý:
$1=$1
được sử dụng ở đây để thi hành một bản cập nhật trên $0
(toàn bộ bản ghi).
Điều này đảm bảo rằng đầu ra in bản ghi hai dòng trên một dòng.
Sau khi bạn sửa đổi một trường trong chương trình của mình khi bạn xử lý bản ghi hai dòng, điều này không còn cần thiết nữa.
Tùy thuộc vào những gì bạn muốn đạt được, nhưng một cách là sử dụng hướng dẫn getline
. Đối với mỗi dòng, đọc tiếp theo và lưu nó vào một biến. Vì vậy, bạn sẽ có dòng đầu tiên trong $0
và thứ hai trong even_line
:
getline even_line
Nếu bạn muốn kết hợp đường nét, sử dụng paste
tiện ích:
$ printf "%s\n" one two three four five
one
two
three
four
five
$ printf "%s\n" one two three four five | paste -d " " - -
one two
three four
five
Đây là một chút hackish, nhưng đó là một literal trả lời cho câu hỏi của bạn:
awk 'BEGIN {RS = "[^\n]*\n[^\n]*\n"} {$0 = RT; print $1, $NF}' inputfile
Đặt dấu phân tách bản ghi thành regex phù hợp với hai dòng. Sau đó, cho mỗi dòng, đặt $0
cho trình kết thúc bản ghi (đó là những gì khớp với regex trong RS
). Điều này thực hiện phân tách trường trên FS
. Bản in chỉ là một người giữ chỗ trình diễn.
Lưu ý rằng $0
sẽ chứa hai dòng mới, nhưng các trường sẽ không chứa bất kỳ dòng mới nào.
- 1. thay đổi một dòng với awk
- 2. Chạy awk bằng cách chia tách các dòng
- 3. Làm thế nào để tách một chuỗi được phân tách thành một mảng trong awk?
- 4. Bộ tách dòng RTF
- 5. Tách tệp văn bản thành Chuỗi trên dòng trống
- 6. Làm cách nào để thay đổi bộ tách dòng JAXB Marshaller?
- 7. Tại sao awk in toàn bộ dòng thay vì trường đầu tiên?
- 8. ggplot2: Tách mặt/dải văn bản thành hai dòng
- 9. AWK tách lĩnh vực hành vi
- 10. Tách một chuỗi thành 2 trong Python
- 11. Chuyển đổi ngày trong AWK
- 12. Thay đổi thành viên bị ghi đè thành không đồng bộ
- 13. AWK để bỏ qua các dòng trống
- 14. chuyển đổi giá trị chuỗi văn bản thành mảng JavaScript được phân tách bằng các dòng mới
- 15. văn bản tuyệt vời 2 thay đổi mẫu thụt lề
- 16. Thay đổi bộ tách UITableViewColor cho một UITableViewCell duy nhất
- 17. Vim: Tách các từ thành các dòng?
- 18. AWK xóa các dòng trống
- 19. Làm cách nào để tách văn bản thành các từ?
- 20. Thay đổi dấu phân cách regex trong các mẫu awk
- 21. Thay đổi updated_at trong một bản ghi Rails
- 22. Thay đổi thụt lề 2 dấu cách thành 4 dấu cách trong vim
- 23. Thay đổi phím tắt trong văn bản tuyệt vời 2
- 24. C++ thay đổi dòng mới từ CR + LF thành LF
- 25. stk awk: thay thế regex trong một trường
- 26. Làm cách nào để tách một chuỗi nhiều dòng thành nhiều dòng?
- 27. sử dụng awk để xác định kỷ lục nhiều dòng và lọc
- 28. Tách tệp bằng AWK trên Mac OS X
- 29. Lệnh AWK để in cho đến khi kết thúc dòng
- 30. awk '{in $ 2, ",", $ 1}' trong Emacs Lisp?