2012-04-01 19 views
11

Tengo un archivo muy grande en el que necesito obtener cada enésima línea e imprimirla en una fila.imprime cada enésima línea en una fila usando gawk

Mis datos:

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 

Quiero que mis datos para el siguiente aspecto:

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

Esto es por supuesto un ejemplo, quiero que cada línea 10a para mi enorme archivo de datos. He intentado esto hasta ahora:

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

Respuesta

33

Para imprimir cada segunda línea, comenzando con la primera:

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

Para imprimir cada décima línea, comenzando con la décima línea:

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

usar esto en un script , agregue lo siguiente a un archivo llamado script.awk:

BEGIN { 
    print "Processing file" 
} 

NR%10==0 

END { 
    print "Finished processing" 
} 

luego ejecutar:

awk -f script.awk file.txt 
+0

¿No debería ser 'awk 'NR% 10 == 0' file.txt'? –

+0

@ D.Shawley Sí, estás en lo cierto. ¡Debería leer todo antes de responder! ¡Aclamaciones! – Steve

+0

Muchas gracias, sé que fue una pregunta simple pero no pude resolverlo por mi vida. – user1269741

2

No es (g) awk, pero que va a trabajar:

cat myfile | grep ^[[:digit:]]*0[[:blank:]] debe hacer el truco.

9

Pedazo de torta: cat test.txt | awk 'NR % 10 == 1'

+1

+1 a pesar del abuso de 'cat'. :) – sarnold

+0

Que imprime la línea siguiendo cada 10ma línea - líneas 1, 11, 21, 31, etc. Quieres líneas donde el módulo es cero en lugar de 1. –

+2

Bueno, ¿por qué? Esto también imprime cada 10ma línea, comenzando con la primera, y coincide con lo que se da como ejemplo. –

10

Con sed, puede hacer muchas variaciones sobre esto con bastante facilidad con el comando first~step. Por ejemplo:

# 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

muy buen uso de 'sed' aquí +1! – Steve

+0

en Mac OS X obtengo 'código de comando inválido ~'. ¿Alguna idea de por qué? – Gerard

+1

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

Cuestiones relacionadas