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

Posted

技术标签:

【中文标题】在变量 BASH 的一行中用逗号分隔值【英文标题】:Seperate values with commas on one line from a variable BASH 【发布时间】:2013-10-07 14:14:30 【问题描述】:

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

2288
87
183
30
16

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

2288, 87, 183, 30, 16

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

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

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,

【讨论】:

它不是一个文件,它是一个变量,我有它似乎没有以同样的方式工作?【参考方案2】:

或者您可以使用 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)。

【讨论】:

【参考方案3】:

awk 解决方案。

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

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

【讨论】:

【参考方案4】:

sed 解决方案:

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

更多详情here

【讨论】:

以上是关于在变量 BASH 的一行中用逗号分隔值的主要内容,如果未能解决你的问题,请参考以下文章

如何在Javascript中用逗号分隔的值匹配数组?

如何在bash中对逗号分隔的值进行排序?

R:如何计算列中用逗号分隔的所有字符值?

HTML 从选择中提交表单,但在 GET 中用逗号分隔值

如何在 BASH 中将制表符分隔值 (TSV) 文件转换为逗号分隔值 (CSV) 文件?

在一行中分配多个用逗号分隔的变量。 C#