How to add text at the end of each line in unix
There are many ways:
sed
: replace $
(end of line) with the given text.
$ sed 's/$/ | COUNTRY/' file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
awk
: print the line plus the given text.
$ awk '{print $0, "| COUNTRY"}' file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
Finally, in pure bash
: read line by line and print it together with the given text. Note this is discouraged as explained in Why is using a shell loop to process text considered bad practice?
$ while IFS= read -r line; do echo "$line | COUNTRY"; done < file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
For a more obfuscated approach:
yes '| COUNTRY' | sed $(wc -l < file)q | paste -d ' ' file -
Another awk
awk '$0=$0" | COUNTRY"' file
You can also use xargs
with echo
for this:
< file xargs -d "\n" -rI % echo '% | COUNTRY'
This will make xargs
take each line of file
and pass it one at a time† to the specified echo
command, replacing the %
(or whatever character you choose) with the input line.
† By default xargs
will pass multiple lines of input to a single command, appending them all to its argument list. But specifying -I %
makes xargs
put the input at the specified place in the command, and only put one line there at a time, running echo
as many times as required.