Intereting Posts
не удается выполнить ping через туннельное устройство ssh Переместить курсорные клавиши в режиме bash vi на <nop> (отключить курсоры) Печатать все слова в строках файла в обратном порядке Преобразование вывода команды в csv с отметкой времени Найти все файлы с Python Shebang Как вы предотвращаете выпуск DHCP во время выключения? наблюдение за выполнением скрипта с помощью скрипта monit, похоже, игнорирует каналы CKB Arch – Daemon запускается при запуске Как заставить OpenVPN прослушивать порты TCP и UDP pacman / yaourt / Arch Linux: как получить краткое изложение CLI устаревших пакетов Как убить процесс в терминале внутри emacs Сценарий запуска systemd после того, как GUI готов? Существуют ли какие-либо недостатки для запуска графического интерфейса на сервере CentOS? ssh не может открыть удаленное окно, ошибка сегментации (сбрасывание ядра) Как установить начальный уровень по умолчанию на ubuntu 16.4

Как удалить новую строку перед EOF в файле text / csv через bash

Ниже приведен пример данных, которые я получаю в txt или csv файле (см. В EmEditor ):

Информация о проблемах

Однако окончательная пустая строка вызывает проблемы при загрузке этих данных в мое программное обеспечение. Мне нужно, чтобы данные выглядели следующим образом.

Исправленные данные

Кто-нибудь сможет написать код для удаления этой последней следующей строки и переместить конец команды файла в последнюю строку?

Существует несколько способов сделать это.

С printf :

 printf "%s" "$(<file)" 

С perl (используйте -i для редактирования файла на месте):

 perl -pe 'chomp if eof' file 

Или с head (если вы уверены, что последний символ является символом новой строки):

 head -c -1 file 

С awk :

 awk 'NR > 1 { print prev } { prev = $0 }' file 

или с sed :

 sed '$d' file 

Вы можете попробовать это

 sed 'N; $ s/\n//; P; D;' file 

Это тоже должно сделать трюк и немного читаемо (по моему предвзятому мнению):

  awk '{ if ( NR == 1) { printf("%s",$0); } else { printf("\n%s", $0); }}' file