在变量BASH的一行上用逗号分隔值

时间:2013-10-07 14:14:31

标签: bash csv sed awk comma

我有一个bash脚本,它在变量中存储了一些值,并在一个单独的行上输出每个值,如下所示:

2288
87
183
30
16

我需要在一行中使用此格式的值,以便导出到CSV

2288, 87, 183, 30, 16

我在线查看了一些使用sedawk的示例,但找不到类似于我的示例

任何帮助将不胜感激

4 个答案:

答案 0 :(得分:2)

paste是你的朋友:

$ paste -s -d',' file
2288,87,183,30,16

您也可以使用trawk,但会得到一个逗号:

$ 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,

答案 1 :(得分:1)

或者您可以使用bash数组。将每个值放入数组中(我使用的是一个简写版本):

declare -ai nums
nums+=(2288)
nums+=(87)
nums+=(183)
nums+=(30)
nums+=(16)

oldIFS="$IFS"
IFS=','
echo "${nums[*]}"
IFS="$oldIFS"

declare -ainums声明为整数数组。然后我们连续将每个值附加到数组(这些可能是变量)。将IFS设置为逗号会更改默认输出分隔符。它也会更改默认输入分隔符,因此最好存储旧值IFS,然后在完成后将其恢复(oldIFS)。

答案 2 :(得分:1)

awk解决方案。

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

这不会给出最终,这里发布的许多解决方案。

答案 3 :(得分:0)

sed解决方案:

sed ':a;N;$!ba;s/\n/, /g' file

更多细节here