Как добавить текст в конце каждой строки в 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 столько раз, сколько требуется.