Introducción

Esta mañá precisei eliminar filas dun CSV para relanzar un proceso no traballo. Algunhas das filas produciran un erro e precisaba relanzalas, para poder depurar qué acontecía. Por sorte, as liñas que funcionan quedan marcadas cun OK e as que non cun KO.

Eran tres ficheiros de máis de cinco mil liñas, polo que facelo a man non era eficiente. Lembrei que no blog de uGeek lera algo similar. No seu caso quería eliminar as liñas en branco.

O caso é que non hai que mudar moito, xa que utiliza unha expresión regular.

Eliminando liñas por contido

Así que no meu caso para eliminar as liñas que funcionaron, tan só tiña que eliminar aquelas que contiñan o OK. Para evitar algunha descripción que poida conter a cadea, buscarei ;OK;.

cat input.txt | sed '/^.*\;OK\;.*$/d' > output.txt

Como podemos ver neste caso utilizamos cat para volcar o contido do arquivo a sed cunha tubería. A orde que lle damos a sed ten que ir entre comillas e a expresión regular entre as barras ‘/’. Ao final da orde, vemos a letra d. Esta é a que indica que ten que borrar esa liña. Por último creamos un novo ficheiro co resultado.

Eliminando liñas por posición

Outra opción para eliminar liñas é facelo por posición, por exemplo:

cat input.txt | sed 3d > output.txt
cat input.txt | sed 14,25d > output.txt

Nos dous exemplos podemos ver coma nun caso, eliminamos a liña tres e no outro un rango da liña catorce á vintecinco. Neste caso non vai entre comillas xa que non é unha expresión.

Traballar sobre o mesmo ficheiro

No meu caso quería conservar os ficheios orixinais, xa que contiñan outras informacións que precisaba. Pero tamén podemos facer que o ficheiro de entrada e o de saída sexan o mesmo. Co que cando eliminemos esas liñas, serán eliminadas na orixe.

sed -i 3d file.txt

Neste caso estou a borrar a liña tres do ficheiro file.txt. O parámetro -i, indica que a saída será o propio ficheiro.

Conclusión

Como vemos é doado eliminar filas nun ficheiro de xeito rápido. Facer isto a man en ficheios grandes pode ser moi ineficiente. Pero a través desta ferramenta, que soe vir con todo-las distribucións, será cuestión de segundos.

Bibliografía

Blog de uGeek: uGeek