1

bashいくつかの値を変数に格納し、次のように各値を別の行に出力するスクリプトがあります。

2288
87
183
30
16

にエクスポートできるように、値をこの形式で 1 ​​行にする必要がありますCSV

2288, 87, 183, 30, 16

sedorを使用したオンラインの例をいくつか見ましたが、私のようawkな例は見つかりませんでした

どんな助けでもいただければ幸いです

4

4 に答える 4

2

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,
于 2013-10-07T14:16:08.437 に答える
1

または、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)。

于 2013-10-07T14:28:18.727 に答える
1

awk解決策。

awk '{$1=$1}1' RS= OFS=,
2288,87,183,30,16

,これは、ここに投稿されたソリューションの多くが持つ最終的なものではありません。

于 2013-10-08T11:01:55.810 に答える