【问题标题】:Use JQ To Convert AWS Output To CSV使用 JQ 将 AWS 输出转换为 CSV
【发布时间】:2019-05-01 19:30:22
【问题描述】:

我正在使用 JQ 将 aws 命令的输出解析为 CSV。

aws ec2 describe-instances | jq '.Reservations[].Instances[] | [(.Tags[]|select(.Key=="Name")|.Value), .InstanceId, .PrivateIpAddress, .LaunchTime, .State.Name, (.Tags[]|select(.Key=="Owner")|.Value)] | @csv'

确实有效。但是输出添加了不需要的额外引号和斜杠:

"\"USAWS1027-AWS\",\"i-0be1611d\",\"10.48.128.37\",\"2016-11-11T16:08:14.000Z\",\"stopped\""
"\"usamzdbd2153\",\"i-7e0d8b91\",\"10.1.233.153\",\"2015-02-19T16:57:57.000Z\",\"running\",\"tsenti\""

为什么要这样做?有什么办法可以将@csv 选项指向 jq 以省略引号和反斜杠?留下逗号。

【问题讨论】:

标签: amazon-web-services export-to-csv jq aws-cli


【解决方案1】:

默认情况下,jq 发出 JSON,因此您可能需要使用 -r 选项:

$ jq -n '"\"a\"" | [.] | @csv'  
"\"\"\"a\"\"\""

$ jq -nr '"\"a\"" | [.] | @csv'
"""a"""

此外,您可能希望去掉包含它们的任何字符串的最外层双引号。例如,考虑:

$ jq -nr 'def s: gsub("^\"|\"$";""); "\"a\"" | [s] | @csv'
"a"

整头猪

如果要消除不包含逗号的字符串周围的引号,请考虑:

echo '["usamzdbd2153","i-7e0d8b91","10.1.233.153","2015-02-19T16:57:57.000Z","running","tsenti"]' |
jq -r '
  def s: gsub("^\"|\"$";""); 
  def t: if test(",") then . else s end; 

  map(t) | join("\t") | gsub("\t";",")'

输出:

usamzdbd2153,i-7e0d8b91,10.1.233.153,2015-02-19T16:57:57.000Z,running,tsenti

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 2022-08-14
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多