2012-04-27 30 views
11

El /./ está eliminando líneas en blanco para la primera condición { print "a"$0 } solamente, ¿cómo me aseguraré de que el script elimine las líneas en blanco para cada condición?AWK eliminar líneas en blanco

awk -F, '/./ { print "a"$0 } NR!=1 { print "b"$0 } { print "c"$0 } END { print "d"$0 }' MyFile 
+1

'awk '/./' MyFile'? 'awk NF' http://www.unix.com/shell-programming-scripting/84923-remove-all-blank-lines-shell-awk.html http://www.tek-tips.com/viewthread.cfm ? qid = 1282604 – ant

+0

Diría que es hora de cambiar la respuesta aceptada, excepto que creo que la respuesta de @ oliv es incluso mejor que la de 25 votos ascendentes, así que quiero darle tiempo para que suba. – Noumenon

Respuesta

1

Coloca el siguiente condiciones dentro de la primera, y comprobar con if declaraciones, así:

awk -F, ' 
    /./ { 
     print "a"$0; 
     if (NR!=1) { print "b"$0 } 
     print "c"$0 
    } 
    END { print "d"$0 } 
' MyFile 
8

si desea ignorar todas las líneas en blanco, poner esto en el comienzo de la secuencia de comandos

/^$/ {next} 
25

Awk comando para eliminar líneas en blanco de un archivo:

awk 'NF > 0' filename 
12

una forma más corta de la respuesta ya propuesta podría ser la siguiente:

awk NF file 

Cualquier awk guión sigue la sintaxis condition {statement}. Si el bloque de instrucción no está presente, awk imprimirá el registro completo (línea) en caso de que el condition no sea cero.

NF variable en awk representa el número de campos en la línea. Por lo tanto, cuando la línea no está vacía, NF mantiene un valor positivo que activa la acción predeterminada awk (imprima toda la línea). En caso de línea vacía, NF es cero y la condición no se cumple, por lo que awk no hace nada.


o

awk '!/^$/' file 

^$ es la expresión regular para una línea vacía. El 2 / es necesario para que awk comprenda que la cadena es una expresión regular. ! es la negación estándar.

+0

¿Cómo funciona esto? – user674669

+0

@ user674669 answer updated – oliv

+0

Gracias @oliv. La mejor respuesta. – user674669

Cuestiones relacionadas