我有以下 json
[
{
"ip":"105.105.105.105",
"timestamp":"1543746097",
"ports":[
{
"port":80,
"proto":"tcp",
"status":"open",
"reason":"syn-ack",
"ttl":128
}
]
},
{
"ip":"105.105.105.105",
"timestamp":"1543746097",
"ports":[
{
"port":53,
"proto":"tcp",
"status":"open",
"reason":"syn-ack",
"ttl":128
}
]
}
]
我想将端口提取为简单csv
输出
80,53
我试过
jq -r '.[]."ports" | map(.port) | @csv' 105.105.105.105_tcp.json
和
jq -r '.[]."ports" | map(.port) | join(",")' 105.105.105.105_tcp.json
但它们都不起作用。
答案1
这是一个仅 jq 的解决方案:
jq -r '[ .[].ports[].port ]|@csv' network.json
80,53
这里的方法是检索端口号,将它们包装到一个数组中,然后将其转换为 CSV 格式。
答案2
我能够通过以下方式获得所需的输出
jq -r '.[]."ports" | .[].port' 105.105.105.105_tcp.json | tr '\n' ',' | sed 's/,*$//g'
不过我想知道是否可以以更优雅的方式完成。
答案3
bash $ jtc -w'<port>l+0' -jr input.json | sed s/[][]//g
80, 53
bash $
jtc
将提取并打印所有端口并将它们包装到数组中。sed
需要删除包围的数组