如何在unix中每行的末尾添加文本

时间:2014-04-15 08:55:27

标签: shell unix awk ksh

我正在进行某些文本处理操作,最终能够获得类似这样的文件

india
sudan
japan
france

现在我想在上面的文件中添加注释,就像在最终文件中一样,它应该是

india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY

整个文件中的相同评论。我该怎么做?

4 个答案:

答案 0 :(得分:57)

有很多方法:

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中:逐行阅读并将其与给定文本一起打印。请注意,这是不鼓励的,如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

答案 1 :(得分:4)

对于更加模糊的方法:

yes '| COUNTRY' | sed $(wc -l < file)q | paste -d ' ' file -

答案 2 :(得分:3)

另一个awk

awk '$0=$0" | COUNTRY"' file

答案 3 :(得分:3)

您也可以将xargsecho一起使用:

< file xargs -d "\n" -rI % echo '% | COUNTRY'

这将使xargs获取file的每一行并将其一次传递给指定的echo命令,替换%(或任何字符选择)输入行。

†默认情况下,xargs会将多行输入传递给单个命令,并将它们全部附加到其参数列表中。但是指定-I %使xargs将输入放在命令中的指定位置,并且一次只放置一行,根据需要多次运行echo