【发布时间】:2013-10-07 14:14:30
【问题描述】:
我有一个bash 脚本,它将一些值存储在一个变量中,并将每个值输出到一个单独的行中,如下所示:
2288
87
183
30
16
我需要在一行中使用这种格式的值,以便我可以导出到CSV:
2288, 87, 183, 30, 16
我在网上查看了一些使用sed 或awk 的示例,但找不到与我类似的示例
任何帮助将不胜感激
【问题讨论】:
我有一个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 或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,
【讨论】:
或者您可以使用 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)。
【讨论】:
awk 解决方案。
awk '{$1=$1}1' RS= OFS=,
2288,87,183,30,16
这并没有给出此处发布的许多解决方案所具有的最终,。
【讨论】:
【讨论】: