У мене є файли, які закінчуються в одному або декількох нових рядках і повинні закінчуватися лише в одному новому рядку. Як я можу це зробити за допомогою інструментів Bash / Unix / GNU?
Приклад неправильного файлу:
1\n
\n
2\n
\n
\n
3\n
\n
\n
\n
Приклад виправленого файлу:
1\n
\n
2\n
\n
\n
3\n
Іншими словами: Між EOF та останнім новим рядком символу файлу має бути рівно один новий рядок.
Довідкова реалізація
Прочитайте вміст файлу, відріжте один новий рядок, поки в кінці не буде більше двох нових рядків, запишіть його назад:
#! /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)
Уточнення: Звичайно, трубопроводи дозволяються, якщо це більш елегантно.