如何用Bash将CSV格式的列转换为逗号分隔列表?
解决gcloud DNS托管区列表转逗号分隔字符串的问题
下面给你几个直接可行的方案,满足把托管区名称转成逗号分隔列表的需求:
方案1:用gcloud原生格式输出+paste直接生成
直接让gcloud输出不带表头的名称列表,再用paste拼接:
gcloud dns managed-zones list --format='value(name)' --project 'sandbox-001' | paste -sd ',' -
value(name)会跳过默认的表头行,直接输出每个托管区的名称(每行一个),paste -sd ',' -则把所有行用逗号连接成一行字符串。
方案2:先去掉表头再拼接
如果坚持用csv(name)格式输出,先通过sed删掉表头行再处理:
gcloud dns managed-zones list --format='csv(name)' --project 'sandbox-001' | sed '1d' | paste -sd ',' -
sed '1d'的作用就是删除第一行的表头"name",后续再用paste完成拼接。
方案3:用awk灵活处理
awk也能完成这个任务,逻辑更清晰:
gcloud dns managed-zones list --format='csv(name)' --project 'sandbox-001' | awk 'NR>1{printf "%s%s", sep, $0; sep=","} END{print ""}'
NR>1表示跳过第一行表头,然后逐行输出名称,用逗号分隔,最后END{print ""}补个换行符让输出更规范。
你之前得到",dns4"大概率是因为没跳过表头,或者paste的参数使用有误(比如漏了-s参数,-s表示把多行合并成一行),试试上面的方法就能得到你要的dns1,dns2,dns3,dns4结果了。
内容的提问来源于stack exchange,提问作者Matrix
相关产品推荐
相关产品推荐

