私は特定のテキスト処理操作を行っており、最終的にこのようなファイルを取得できます
india
sudan
japan
france
最後のファイルにあるようなコメントを上記のファイルに追加したい
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
ファイル全体の同じコメントのように。どうすればいいですか?
多くの方法があります。
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
より難読化されたアプローチの場合:
yes '| COUNTRY' | sed $(wc -l < file)q | paste -d ' ' file -
これには、xargs
をecho
とともに使用することもできます。
< file xargs -d "\n" -rI % echo '% | COUNTRY'
これにより、xargs
がfile
の各行を取り、指定されたecho
コマンドに一度に1行ずつ渡し、%
(または選択した任意の文字)と入力行。
†デフォルトでは、xargs
は複数行の入力を単一のコマンドに渡し、それらすべてを引数リストに追加します。ただし、-I %
は、xargs
がコマンドの指定された場所に入力を配置し、必要な回数だけecho
を実行して、一度に1行だけを入力します。
別のawk
awk '$0=$0" | COUNTRY"' file