首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bash将csv格式列转换为逗号分隔列表

使用bash将csv格式列转换为逗号分隔列表
EN

Stack Overflow用户
提问于 2022-09-07 10:09:57
回答 2查看 61关注 0票数 0

我需要将CSV格式的列转换为逗号分隔的列表,这样我就可以在列表上使用for循环并使用每个参数。

在这里,我已经尝试过:

代码语言:javascript
复制
$ gcloud dns managed-zones list --format='csv(name)' --project 'sandbox-001'

输出:

代码语言:javascript
复制
name
dns1
dns2
dns3
dns4

我需要这样的结果:"dns1,dns2,dns3,dns4“,以便我可以使用for循环:

代码语言:javascript
复制
x="dns1, dns2, dns3, dns4"
for i in $x:
   print $i
done

paste命令返回最后一行:

代码语言:javascript
复制
$ gcloud dns managed-zones list --format='csv(name)' --project 'sandbox-001' |paste -sd,

,dns4

如果有人能帮我做这件事,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-07 10:27:59

真正的问题显然是输出有DOS行提要。有关更广泛的讨论,请参见Are shell scripts sensitive to encoding and line endings?,但要获得即时解决方案,请尝试

代码语言:javascript
复制
tr -s '\015\012' , <file | sed 's/^[,]*,//;s/,$/\n/'

for的参数应该只是标记的列表,而不是它们之间的逗号。但是,更好的解决方案是使用while read。另见Don't read lines with for

代码语言:javascript
复制
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的权限,但是它的手册页面提到了其他几种格式,这些格式可能更适合您的需要。查看jsonlist格式是否更易于操作。(带有单个列的CSV实际上并不是CSV,只是一个文本文件。)

票数 0
EN

Stack Overflow用户

发布于 2022-09-07 14:07:43

创建一个数组:

代码语言:javascript
复制
arr=( $(gcloud dns managed-zones list --format='csv(name)' --project 'sandbox-001') )

printf更像这样:

代码语言:javascript
复制
printf -v var '%s,' "${arr[@]:1}"

这将创建变量$var,其值为“dns1,dns2,dns3,”如下所示,以删除最后一个逗号:

代码语言:javascript
复制
echo "${var%,}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73633689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档