Как добавить текст в конце каждой строки в unix
Я выполняю определенные операции обработки текста и, наконец, могу получить файл примерно так
india
sudan
japan
france
теперь я хочу добавить комментарий в вышеуказанный файл, как в конечном файле, он должен быть чем-то вроде
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
как один и тот же комментарий по всему файлу. Как мне это сделать?
Ответы
Ответ 1
Есть много способов:
sed
: замените $
(конец строки) заданным текстом.
$ sed 's/$/ | COUNTRY/' file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
awk
: распечатать строку плюс указанный текст.
$ awk '{print $0, "| COUNTRY"}' file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
Наконец, в чистом bash
: читайте по строкам и печатайте его вместе с данным текстом. Обратите внимание, что это обескураживается, как объясняется в разделе Почему используется цикл оболочки для обработки текста, считающегося плохой практикой?
$ while IFS= read -r line; do echo "$line | COUNTRY"; done < file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
Ответ 2
Для более запутанного подхода:
yes '| COUNTRY' | sed $(wc -l < file)q | paste -d ' ' file -
Ответ 3
Еще один awk
awk '$0=$0" | COUNTRY"' file
Ответ 4
Вы также можете использовать xargs
с echo
для этого:
< file xargs -d "\n" -rI % echo '% | COUNTRY'
Это заставит xargs
брать каждую строку file
и передавать ее по одному † указанной команде echo
, заменяя %
(или любой другой символ, который вы выберете) строкой ввода.
† По умолчанию xargs
передает несколько строк ввода одной команде, добавляя их все в свой список аргументов. Но указание -I %
заставляет xargs
помещать ввод в указанное место команды и помещать туда только одну строку, выполняя echo
столько раз, сколько требуется.