Tengo archivos que terminan en una o más líneas nuevas y deberían terminar en una sola línea nueva. ¿Cómo puedo hacer eso con las herramientas Bash / Unix / GNU?
Ejemplo de archivo incorrecto:
1\n
\n
2\n
\n
\n
3\n
\n
\n
\n
Archivo corregido de ejemplo:
1\n
\n
2\n
\n
\n
3\n
En otras palabras: debe haber exactamente una nueva línea entre el EOF y el último carácter que no sea de nueva línea del archivo.
Implementación de referencia
Lea el contenido del archivo, corte una línea nueva hasta que no haya más líneas nuevas al final, escríbala de nuevo:
#! /bin/python
import sys
with open(sys.argv[1]) as infile:
lines = infile.read()
while lines.endswith("\n\n"):
lines = lines[:-1]
with open(sys.argv[2], 'w') as outfile:
for line in lines:
outfile.write(line)
Aclaración: Por supuesto, se permite la tubería, si eso es más elegante.