amazon-web-services - 使用 JQ 将 AWS 输出转换为 CSV
问题描述
我正在使用 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 以省略引号和反斜杠?只留下逗号。
解决方案
默认情况下,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
推荐阅读
- xcode - 'EXUpdates/EXUpdatesAppController.h' 文件未找到 XCODE
- node.js - NPM 不会通过 Git Bash 安装依赖项
- r - data.table 的意外行为:= 子集时
- nginx - 基于服务器200响应失败的NGINX路由
- python - 让 size() 或 groupby & count 跨所有列工作
- elf - 在 elf 文件的注释部分修改 build-id
- azure - Azure AD - 在令牌 SPA 应用程序中返回角色和组
- java - 使用xml配置将依赖项注入Spring-Boot中的@RestController
- python - 从文件中获取不同的字符串并写入 .txt
- java - 将 TDD 重构为一系列测试