2012-04-01 11 views
11

Mam bardzo duży plik, w którym muszę uzyskać każdą n-tą linię i wydrukować ją w wierszu.drukuj co n-tą linię w wierszu za pomocą gawk

moje dane:

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 

chcę moje dane wyglądać tak:

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

Jest to oczywiście przykład, chcę co 10 linii do mojego ogromnego pliku danych. Próbowałem to do tej pory:

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

Odpowiedz

33

Aby wydrukować każdą drugą linię, zaczynając od pierwszego:

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

Aby wydrukować każdą dziesiątą linii, począwszy od dziesiątego line:

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

Aby to wykorzystać w skrypcie , dodaj następujące informacje do pliku o nazwie script.awk:

BEGIN { 
    print "Processing file" 
} 

NR%10==0 

END { 
    print "Finished processing" 
} 

Następnie wykonać:

awk -f script.awk file.txt 
+0

Czy to nie powinno być 'awk 'NR% 10 == 0' plik.txt'? –

+0

@ D.Shawley Tak, masz rację. Naprawdę powinienem przeczytać wszystko przed odpowiedzią! Twoje zdrowie! – Steve

+0

Dziękuję bardzo, wiem, że to było proste pytanie, ale nie mogłem tego rozgryźć za moje życie. – user1269741

2

Nie (g) awk, ale to działa:

cat myfile | grep ^[[:digit:]]*0[[:blank:]] powinno załatwić sprawę.

9

kawałek tortu: cat test.txt | awk 'NR % 10 == 1'

+1

+1 pomimo nadużywania 'cat'. :) – sarnold

+0

To drukuje linię po co 10 linii - linie 1, 11, 21, 31, itp. Chcesz wierszy, gdzie moduł wynosi zero zamiast 1. –

+2

Cóż, dlaczego? Drukuje również co 10. linię, zaczynając od pierwszej, i pasuje do tego, co podano jako przykład. –

10

Z sed, można zrobić wiele wariacji na ten dość łatwo z komendy first~step. Na przykład:

# 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

bardzo przyjemne użycie słowa "sed" tutaj +1! – Steve

+0

na Mac OS X Otrzymuję 'nieprawidłowy kod polecenia ~'. Każdy pomysł, dlaczego? – Gerard

+1

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

Powiązane problemy