2012-04-01 15 views
11

Tôi có một tệp rất lớn, trong đó tôi cần lấy mọi dòng thứ n và in nó thành một hàng.in mọi dòng thứ n vào hàng bằng gawk

dữ liệu của tôi:

1  937 4.320194 
2  667 4.913314 
3  934 1.783326 
4  940 -0.299312 
5  939 2.309559 
6  936 3.229496 
7  611 -1.41808 
8  608 -1.154019 
9  606 2.159683 
10  549 0.767828 

Tôi muốn dữ liệu của tôi trông như thế này:

1  937 4.320194 
3  934 1.783326 
5  939 2.309559 
7  611 -1.41808 
9  606 2.159683 

Đây là khóa học một ví dụ, tôi muốn mỗi dòng 10 cho tập tin dữ liệu khổng lồ của tôi. Tôi cố gắng này cho đến nay:

NF == 6 { 
    if(NR%10) {print;} 
    } 

Trả lời

33

Để in mỗi dòng thứ hai, bắt đầu với những người đầu tiên:

awk 'NR%2==1' file.txt 

Để in mỗi dòng thứ mười, bắt đầu với dòng thứ mười:

awk 'NR%10==0' file.txt 

Để sử dụng này trong một kịch bản , hãy thêm thông tin sau vào tệp có tên script.awk:

BEGIN { 
    print "Processing file" 
} 

NR%10==0 

END { 
    print "Finished processing" 
} 

Sau đó thực hiện:

awk -f script.awk file.txt 
+0

Không nên là 'awk' NR% 10 == 0 'file.txt'? –

+0

@ D.Shawley Có bạn là chính xác. Tôi thực sự nên đọc mọi thứ trước khi trả lời! Chúc mừng! – Steve

+0

Cảm ơn bạn rất nhiều, tôi biết đó là một câu hỏi đơn giản nhưng tôi không thể tìm ra nó cho cuộc sống của tôi. – user1269741

2

Nó không phải (g) awk, nhưng nó sẽ làm việc:

cat myfile | grep ^[[:digit:]]*0[[:blank:]] nên làm các trick.

9

Piece of cake: cat test.txt | awk 'NR % 10 == 1'

+1

+1 bất chấp sự lạm dụng của 'mèo'. :) – sarnold

+0

Điều đó in dòng sau mỗi dòng thứ 10 - dòng 1, 11, 21, 31, v.v. Bạn muốn dòng nơi mô đun bằng không thay vì 1. –

+2

Vâng, tại sao? Điều này cũng in mọi dòng thứ 10, bắt đầu bằng dòng thứ nhất và phù hợp với những gì được đưa ra làm ví dụ. –

10

Với sed, bạn có thể làm được rất nhiều sự thay đổi về vấn đề này khá dễ dàng với lệnh first~step. Ví dụ:

# Odd lines 
sed -n 1~2p file 
# Every tenth line (10, 20, 30, ...) 
sed -n 10~10p file 
# Every tenth line (1, 11, 21, ...) 
sed -n 1~10p file 
# First plus every tenth (1, 10, 20, 30, ...) 
sed -n -e 1p -e 10~10p file 
+0

sử dụng rất tốt 'sed' ở đây +1! – Steve

+0

trên Mac OS X Tôi nhận được 'mã lệnh không hợp lệ ~'. Bất kỳ ý tưởng tại sao? – Gerard

+1

@Gerard Xem: https://stackoverflow.com/questions/30003570/how-to-use-gnu-sed-on-mac-os-x – arielf