2010-12-15 17 views
7

Hay un salto de párrafo al final de mi archivo .csv. Traté de eliminar la línea en blanco que se encuentra al final del archivo con el siguiente comando.Eliminación de la última línea en blanco

sed -i '/^$/d' combined.csv 

Pero no funciona y todavía hay una línea en blanco. Puedo eliminar la última línea usando el siguiente comando.

sed -i '$d' combined.csv 

¿Pero es posible verificar si la última línea está realmente vacía antes de quitarla?

Actualización:

estoy usando el siguiente comando para comprobar si cada línea de salida con un número.

sed -i '1s/^[^0-9]*//' combined.csv 

Esto solo comprueba la primera línea y no el resto de las líneas. ¿Cómo hago para que compruebe todas las líneas en el archivo? Esto podría resolver mi problema.

Respuesta

17

Probar ${/^$/d;} Esto solo coincidirá con una línea vacía si es la última línea del archivo.

Actualización: Sobre la segunda pregunta, basta con retirar el 1 antes de las s, es decir .: sed -i 's/^[^0-9]*//' combined.csv

+0

Gracias, esto funciona! ¿Podrías dar más detalles sobre el primer comando sed? – dangonfast

5

encontrado esto hace años en algún lugar y se guarda el fragmento. No me pregunte como funciona:

perl -i -pe "chomp if eof" combined.csv 
+2

Si no hay una línea vacía en EOF (\ n \ n), esto también eliminará el último \ n en EOF, que no debería eliminarse en Unix. –

+0

@ AleksandrLevchuk: Buen punto, pero eso se soluciona fácilmente: 'perl -pe 'chomp si eof &&/^ $ /' combined.csv' – mklement0

0

Trate $ {/^$/d;} esto sólo coincide con una línea en blanco si es la última línea del archivo.

he probado con sed (sed de GNU) 4.2.2 y tiene todas las líneas en blanco no sólo eliminan la línea en blanco si es la última línea del archivo.

Encontré el siguiente comando, que funcionó para mí que hace el trabajo.

sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' 

Este comando es de una colección de útiles SED-Citas: http://sed.sourceforge.net/sed1line.txt

+0

' $ {/^$/d;} 'debería funcionar bien, con cualquier POSIX -compatible 'sed'.Pruebe 'sed '$ {/^$/d;}' <<< $ 'a \ n \ nb \ n'' y verá que solo se elimina la última línea. – mklement0

+0

Su alternativa hace algo diferente: recorta _all_ nuevas líneas finales adicionales, no solo la última, y ​​también lee el archivo completo _al vez_, lo cual es innecesario en este caso y problemático con archivos grandes. – mklement0

0

Para eliminar líneas en blanco que puede utilizar grep . o sed '/^$/d'

Se eliminará cualquier línea en blanco en el archivo. Espero que su archivo no tenga líneas en blanco en el medio, pero esto funcionará en su caso.

cat combined.csv | grep .

o

cat combined.csv | sed '/^$/d'

Cuestiones relacionadas