bash
いくつかの値を変数に格納し、次のように各値を別の行に出力するスクリプトがあります。
2288
87
183
30
16
にエクスポートできるように、値をこの形式で 1 行にする必要がありますCSV
。
2288, 87, 183, 30, 16
sed
orを使用したオンラインの例をいくつか見ましたが、私のようawk
な例は見つかりませんでした
どんな助けでもいただければ幸いです
paste
あなたの友達です:
$ paste -s -d',' file
2288,87,183,30,16
tr
またはを使用することもできawk
ますが、末尾にコンマが付きます:
$ awk '{printf $0","}' file
2288,87,183,30,16,
$ tr -s '\n' ',' <file
2288,87,183,30,16,
それはファイルではなく、私が持っている変数であり、同じように機能していないように見えますか?
すこし:
$ myvar="2288
87
183
30"
$ echo "$myvar" | paste -s -d','
2288,87,183,30
$ echo "$myvar" | tr -s '\n' ', '
2288,87,183,30,
$ echo "$myvar" | awk '{printf $0","}'
2288,87,183,30,
または、bash 配列を使用することもできます。各値を配列に配置します (私は手書きバージョンを使用しています)。
declare -ai nums
nums+=(2288)
nums+=(87)
nums+=(183)
nums+=(30)
nums+=(16)
oldIFS="$IFS"
IFS=','
echo "${nums[*]}"
IFS="$oldIFS"
は整数の配列として宣言declare -ai
します。nums
次に、各値を配列に連続して追加します (これらは変数である可能性があります)。IFS
コンマを設定すると、デフォルトの出力セパレータが変更されます。また、デフォルトの入力セパレーターも変更されるため、古い値を保存し、IFS
完了したら復元することをお勧めします ( oldIFS
)。
awk
解決策。
awk '{$1=$1}1' RS= OFS=,
2288,87,183,30,16
,
これは、ここに投稿されたソリューションの多くが持つ最終的なものではありません。