我有一个bash
脚本,它将一些值存储在一个变量中,并在单独的行上输出每个值,如下所示:
2288
87
183
30
16
我需要在一行中采用这种格式的值,以便可以导出到CSV
:
2288, 87, 183, 30, 16
我在网上查看了一些使用的示例,sed
但awk
找不到与我类似的示例
任何帮助,将不胜感激
paste
是你的朋友:
$ paste -s -d',' file
2288,87,183,30,16
您也可以使用tr
or 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,
一个awk
解决方案。
awk '{$1=$1}1' RS= OFS=,
2288,87,183,30,16
这并没有给出,
此处发布的许多解决方案的最终结果。
或者您可以使用 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
)。