複数行のコマンド出力を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(非対話型シェルインスタンスのみ)。

答え2

trある文字を別の文字に変換できます。

echo "username
country
town" | tr '\n' ' '

出力:

username country town

tr -d文字(改行)を何もないものに置き換えるために使用されます。

echo "username
country
town" | tr -d '\n'

出力:

usernamecountrytown

しかし、改行文字をいくつかの文字で置き換える場合は、trこれだけでは不十分です。それにもかかわらず、非常に簡単なコマンドなので、これについて話しています。

しかし、次のようにすることができますsed

echo "username
country
town" | sed ":a; N; s/\n/ - /; ta;"

出力:

username - country - town

答え3

 awk 'ORS=" - "{print $0}' filename|awk '{gsub(/- $/,"",$0);print }'

出力

username - country

答え4

パイプを介してここに接続します。

sed -z 's|\n| - |'

GNUを使用してsed改行文字を-

関連情報