Bỏ qua 6 dòng / hàng đầu tiên trong tệp văn bản với awk


39

Làm cách nào tôi có thể bỏ qua 6 dòng / hàng đầu tiên trong tệp văn bản (input.txt) và xử lý phần còn lại bằng awk? Định dạng của tập lệnh awk của tôi (program.awk) là:

BEGIN {
} 

{ 
process here
} 

END {

}

Tệp văn bản của tôi là như thế này:

0
3
5
0.1 4.3
2.0 1.5
1.5 3.0
0.3 3.3
1.5 2.1
.
.
.

Tôi muốn xử lý tệp bắt đầu từ:

0.3 3.3
1.5 2.1
.
.
.

Câu trả lời:


59

Sử dụng một trong hai mẫu sau:

NR>6 { this_code_is_active }

hoặc này:

NR<=6 { next }
{ this_code_is_active }

Sử dụng FNR thay vì NR nếu bạn có nhiều tệp làm đối số và muốn bỏ qua 6 dòng trong mỗi tệp.


29

Thử:

awk 'FNR > 6 { #process here }' file

4
Tốt Nhưng bạn đã không giải thích lý do tại sao điều này tốt hơn - vì nhiều tệp FNRlà số hàng trong mỗi tệp, trong khi đó NRlà số trong toàn bộ đầu vào (không phải là vấn đề khi đường ống).
Tomasz Gandor

3

Bạn cũng có thể bỏ qua một số dòng tùy ý ở đầu hoặc cuối tệp bằng cách sử dụng headhoặc tailchương trình.

Đối với câu hỏi cụ thể của bạn,

tail input.txt -n+7 | program.awk

sẽ làm, miễn program.awklà tập tin của bạn được thực thi. Nếu không, bạn có thể sử dụng

tail input.txt -n+7 | awk -f program.awk

Bằng cách này, bạn sẽ dành một so sánh cho từng dòng và bạn không cần thay đổi logic của mã AWK của mình.

tail sẽ bắt đầu truyền phát văn bản bắt đầu từ dòng thứ bảy, bỏ qua sáu dòng đầu tiên.

Đây sẽ không phải là một vấn đề lớn trong hiệu suất, đặc biệt nếu quá trình văn bản đơn giản nhờ vào bộ đệm. Tuy nhiên, đối với các tệp dài và sử dụng nhiều lần trong môi trường đám mây có thể tiết kiệm một số chi phí.


Đúng, nhưng theo nguyên tắc thông thường, người ta nên tránh đường ống khi bạn có thể dễ dàng làm điều đó chỉ với một công cụ. Hãy nghĩ về một tệp văn bản khổng lồ dẫn qua cả hai lệnh chỉ để loại bỏ một vài dòng.
Philippos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.