在变量 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
我在网上查看了一些使用sed
或awk
的示例,但找不到与我类似的示例
任何帮助将不胜感激
【问题讨论】:
【参考方案1】: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,
【讨论】:
它不是一个文件,它是一个变量,我有它似乎没有以同样的方式工作?【参考方案2】:或者您可以使用 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
)。
【讨论】:
【参考方案3】:awk
解决方案。
awk '$1=$11' RS= OFS=,
2288,87,183,30,16
这并没有给出此处发布的许多解决方案所具有的最终,
。
【讨论】:
【参考方案4】:sed 解决方案:
sed ':a;N;$!ba;s/\n/, /g' file
更多详情here
【讨论】:
以上是关于在变量 BASH 的一行中用逗号分隔值的主要内容,如果未能解决你的问题,请参考以下文章