У меня есть набор неполных файлов: в последней строке отсутствует символ EOL.
Какой самый простой способ добавить новую строку, используя любой инструмент (awk, может быть?)?
Ответ 1
Чтобы добавить новую строку в конце файла:
echo >>file
Чтобы добавить строку в конец каждого файла в текущем каталоге:
for x in *; do echo >>"$x"; done
Если вы не знаете заранее, заканчивается ли каждый файл в новой строке, сначала проверьте последний символ. tail -c 1 печатает последний символ файла. Так как подстановка команд усекает любую окончательную новую строку, $(tail -c 1 <file) пуст, если файл пуст или заканчивается в новой строке, и не пуст, если файл заканчивается символом новой строки.
for x in *; do if [ -n "$(tail -c 1 <"$x")" ]; then echo >>"$x"; fi; done
Ответ 2
Vim отлично подходит для этого, потому что если вы не откроете файл в режиме binary, он автоматически закончит файл с завершенной линией окончания.
Итак:
vim file -c 'wq'
должен работать, независимо от того, имеют ли ваши файлы стиль линии Unix, Windows или Mac.