我需要将CSV格式的列转换为逗号分隔的列表,这样我就可以在列表上使用for循环并使用每个参数。
在这里,我已经尝试过:
$ gcloud dns managed-zones list --format='csv(name)' --project 'sandbox-001'输出:
name
dns1
dns2
dns3
dns4我需要这样的结果:"dns1,dns2,dns3,dns4“,以便我可以使用for循环:
x="dns1, dns2, dns3, dns4"
for i in $x:
print $i
donepaste命令返回最后一行:
$ gcloud dns managed-zones list --format='csv(name)' --project 'sandbox-001' |paste -sd,
,dns4如果有人能帮我做这件事,我将不胜感激。
发布于 2022-09-07 10:27:59
真正的问题显然是输出有DOS行提要。有关更广泛的讨论,请参见Are shell scripts sensitive to encoding and line endings?,但要获得即时解决方案,请尝试
tr -s '\015\012' , <file | sed 's/^[,]*,//;s/,$/\n/'for的参数应该只是标记的列表,而不是它们之间的逗号。但是,更好的解决方案是使用while read。另见Don't read lines with for
gcloud dns managed-zones list --format='csv(name)' \
--project 'sandbox-001' |
tr -d '\015' |
tail -n +2 | # skip header line
while read -r i; do
echo "$i" # notice also quoting
done我没有访问gcloud的权限,但是它的手册页面提到了其他几种格式,这些格式可能更适合您的需要。查看json或list格式是否更易于操作。(带有单个列的CSV实际上并不是CSV,只是一个文本文件。)
发布于 2022-09-07 14:07:43
创建一个数组:
arr=( $(gcloud dns managed-zones list --format='csv(name)' --project 'sandbox-001') )比printf更像这样:
printf -v var '%s,' "${arr[@]:1}"这将创建变量$var,其值为“dns1,dns2,dns3,”如下所示,以删除最后一个逗号:
echo "${var%,}"https://stackoverflow.com/questions/73633689
复制相似问题