2012-02-28 19 views
8

Tengo un archivo que se parece a esto:¿Por qué awk no está imprimiendo nuevas líneas?

1 
2 
AA 
4 
5 
AA BB 
7 
8 
AA BB CC 
10 
11 
AA BB CC DD 

estoy usando awk para extraer sólo cada nth línea donde n=3.

>>awk 'NR%3==0' /input/file_foo >> output/file_foobar 

La salida está apareciendo en una sola línea como:

AA AA BB AA BB CC AA BB CC DD 

..... y así sucesivamente

quiero que aparezca como:

AA 
AA BB 
AA BB CC 
AA BB CC DD 

Intenté usar \n, printf con \n, y así sucesivamente, pero no funciona como esperaba. Por favor avise.

+2

¿Qué shell estás usando? Es un mensaje convencional que no indica el tipo de shell. ¿Cómo está demostrando que los datos son planos en una sola línea? –

+1

¿Intentó cambiar la variable RS? –

+0

Gracias. Estaba usando Cygwin, pero el terminador de línea no era el correcto, como mencionó Shiplu. – mane

Respuesta

8

Una forma prolija,

awk '{ if (NR%3==0) { print $0} }' 

También puede utilizar {printf("%s\n\n", $0)} también. si solo \n no funciona.

Si todavía no funciona, es posible que deba verificar el terminador de línea. Puede no ser apropiado. Use la variable RS en awk para separar en el inusual terminador de línea.

+0

Parece que no funciona en absoluto. El segundo produce algunos errores. el primero no imprime los resultados correctos en absoluto. De hecho, quiero copiar cada tercera línea de un archivo a otro archivo, eso es todo. – mane

+1

Creo que su terminador de línea de archivos no es apropiado. –

+0

Gracias Shiplu. El terminador de línea no era apropiado. Ahora funciona. – mane

2

Utilice el siguiente con print para cada línea:

awk 'NR%3==0 { print $0 }' /input/file_foo >> output/file_foobar 
3

Creo que el problema está en la forma en que está mostrando los datos, no en el procesamiento.

$ cat x 
1 
2 
AA 
4 
5 
AA BB 
7 
8 
AA BB CC 
10 
11 
AA BB CC DD 
$ awk 'NR%3==0' x 
AA 
AA BB 
AA BB CC 
AA BB CC DD 
$ 

Sospecho que lo que está haciendo es similar a:

$ awk 'NR%3==0' x > y 
$ x=$(<y) 
$ echo $x 
AA AA BB AA BB CC AA BB CC DD 
$ echo "$x" 
AA 
AA BB 
AA BB CC 
AA BB CC DD 
$ 

Esto le podría confundir. Vea también: Capturing multi-line output to a bash variable.

+0

Esto funciona bien. Gracias – mane

Cuestiones relacionadas