web-dev-qa-db-ja.com

UNIXの各行の最後にテキストを追加する方法

私は特定のテキスト処理操作を行っており、最終的にこのようなファイルを取得できます

india
sudan
japan
france

最後のファイルにあるようなコメントを上記のファイルに追加したい

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

ファイル全体の同じコメントのように。どうすればいいですか?

29
user2647888

多くの方法があります。

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
58
fedorqui

より難読化されたアプローチの場合:

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

これには、xargsechoとともに使用することもできます。

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

これにより、xargsfileの各行を取り、指定されたechoコマンドに一度に1行ずつ渡し、%(または選択した任意の文字)と入力行。

†デフォルトでは、xargsは複数行の入力を単一のコマンドに渡し、それらすべてを引数リストに追加します。ただし、-I %は、xargsがコマンドの指定された場所に入力を配置し、必要な回数だけechoを実行して、一度に1行だけを入力します。

3
Smylers

別のawk

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