複数行のコマンド出力を1行にまとめるには?

複数行のコマンド出力を1行にまとめるには?

Bashシェルの私のコマンドは次のように出力されます。

username
country

しかし、印刷物を次のように修正したいと思います。

username - country

ありがとうございます。

ベストアンサー1

私は次のことをします:

$ seq 6 | awk '{printf "%s", sep $0; sep = " - "}; END {if (NR) print ""}'
1 - 2 - 3 - 4 - 5 - 6

または:

$ seq 6 | paste -d ' - \n' - /dev/null /dev/null -
1 - 2
3 - 4
5 - 6

または:

$ seq 5 | sed '$!N;s/\n/ - /'
1 - 2
3 - 4
5

2行の出力であれば、次のようにすることもできます。

$ seq 2 | { IFS= read -r a; IFS= read -r b; printf '%s\n' "$a - $b"; }
1 - 2

シェルにはbashwhere 、同じreadものprintfが組み込まれており、別のコマンドを実行する必要はありません。この処理を実行するために、追加のプロセス生成をbash保存するオプションを設定できますlastpipe(非対話型シェルインスタンスのみ)。

おすすめ記事