我有一个bash
脚本,它在变量中存储了一些值,并在一个单独的行上输出每个值,如下所示:
2288
87
183
30
16
我需要在一行中使用此格式的值,以便导出到CSV
:
2288, 87, 183, 30, 16
我在线查看了一些使用sed
或awk
的示例,但找不到类似于我的示例
任何帮助将不胜感激
答案 0 :(得分: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,
答案 1 :(得分: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
)。
答案 2 :(得分:1)
awk
解决方案。
awk '{$1=$1}1' RS= OFS=,
2288,87,183,30,16
这不会给出最终,
这里发布的许多解决方案。
答案 3 :(得分:0)