1

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

2288
87
183
30
16

我需要在一行中采用这种格式的值,以便可以导出到CSV

2288, 87, 183, 30, 16

我在网上查看了一些使用的示例,sedawk找不到与我类似的示例

任何帮助,将不胜感激

4

4 回答 4

2

paste是你的朋友:

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

您也可以使用tror 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

一个awk解决方案。

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

这并没有给出,此处发布的许多解决方案的最终结果。

于 2013-10-08T11:01:55.810 回答
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 回答
0

sed 解决方案:

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

更多细节在这里

于 2015-10-30T08:05:08.183 回答