2012-04-01 3 views
11

Ho un file molto grande in cui ho bisogno di ottenere ogni ennesima riga e stamparlo in una riga.stampa ogni ennesima riga in una riga utilizzando gawk

I miei dati:

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 

Voglio che i miei dati a guardare come questo:

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

Questo è ovviamente un esempio, voglio che ogni linea di 10 ° per il mio enorme file di dati. Ho provato questo finora:

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

risposta

33

Per stampare ogni seconda linea, a partire dal primo:

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

Per stampare ogni decimo linea, a partire dalla decima riga:

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

Per utilizzare questo in uno script , aggiungere quanto segue al file script.awk:

BEGIN { 
    print "Processing file" 
} 

NR%10==0 

END { 
    print "Finished processing" 
} 

quindi eseguire:

awk -f script.awk file.txt 
+0

Non dovrebbe essere "awk" NR% 10 == 0 'file.txt'? –

+0

@ D.Shawley Sì, hai ragione. Dovrei davvero leggere le cose prima di rispondere! Saluti! – Steve

+0

Grazie mille, so che era una domanda semplice ma non riuscivo a capirlo per la vita di me. – user1269741

2

Non è (g) awk, ma funzionerà:

cat myfile | grep ^[[:digit:]]*0[[:blank:]] dovrebbe fare il trucco.

9

Parte della torta: cat test.txt | awk 'NR % 10 == 1'

+1

+1 nonostante l'abuso di 'cat'. :) – sarnold

+0

Che stampa la riga dopo ogni 10ª riga - righe 1, 11, 21, 31, ecc. Si desidera linee in cui il modulo sia zero anziché 1. –

+2

Bene, perché? Questo stampa anche ogni decima riga, a partire dalla prima, e corrisponde a ciò che viene dato come esempio. –

10

Con sed, si può fare un sacco di variazioni su questo abbastanza facilmente con il comando first~step. Ad esempio:

# 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

uso molto bello di 'sed' qui +1! – Steve

+0

su Mac OS X Ricevo 'codice comando non valido ~'. Qualche idea del perché? – Gerard

+1

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