【发布时间】:2018-12-07 21:33:28
【问题描述】:
我需要提取 AWS 实例及其实例 ID 和公共 IP 的列表,并将其输出到 csv 格式的电子表格。
这是我正在使用的ORIGINAL JSON(外部 IP 信息已被隐藏)。
这是我正在使用的命令:
aws ec2 describe-instances --profile="$aws_account" | jq -r '.Reservations[].Instances[] | [ .InstanceId, .NetworkInterfaces[].PrivateIpAddresses[].Association.PublicIp // null] | @csv'
这行得通!但是如果有多个公共 IP,就会出现问题。
使用一个公共 ip,输出看起来不错:
AWS Instance ID | Public IP
i-0e636f1d0f0009f78,18.xxx.xx.112
如果有多个公共 IP,输出会溢出 CSV 电子表格中的列:
AWS Instance ID | Public IP |Key Name Owner Instance State
i-9a02a66b ,54.xx.xx.201,52.x.xxxx.160,52.x.xx.175,34.xx.xx.31
我想知道如何使用 JQ 命令将逗号替换为空格(因此 csv 可以将它们放在同一列中)以及将空值替换为空格(对于没有公共 IP 的 aws 实例)。
我将省略创建额外列的代码,以便我们可以专注于公共 IP,这是最大的问题。
【问题讨论】:
-
是的,这就是没有
@csv选项的工作方式。如果你输出到@csv,那么所有的条目都用引号括起来,即使 -r 在那里。所以我使用 sed 删除仍然存在的引号,因为我们正在输出到 csv。 -
您是否考虑过使用 TSV 代替 CSV?
-
但引号是 csv 格式的一部分。这是一个特性,而不是一个错误。如果解析您的输出的代码不理解这些引号,那么它就不是真正兼容的 CSV 解析器(并且您想要的格式也不是真正的 CSV)。
-
不,我没有尝试过使用 TSV。我只是不想在我发布的电子表格中引用引号。我只是将 CSV 用作“阅读表友好”格式。
-
在 Excel(或您选择的电子表格)中打开您的 CSV,而无需先使用
sed对其进行修改。您不会将那里的引号视为文字数据;它们是语法,而不是语义。