Ho dei file che finiscono in una o più righe e che dovrebbero terminare in una riga. Come posso farlo con gli strumenti Bash / Unix / GNU?
Esempio di file errato:
1\n
\n
2\n
\n
\n
3\n
\n
\n
\n
Esempio di file corretto:
1\n
\n
2\n
\n
\n
3\n
In altre parole: dovrebbe esserci esattamente una nuova riga tra l'EOF e l'ultimo carattere non newline del file.
Implementazione di riferimento
Leggi il contenuto del file, taglia una nuova riga finché non ci sono altre due righe alla fine, riscrivilo:
#! /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)
Chiarimento: ovviamente, le tubazioni sono consentite, se è più elegante.