私は次の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
周辺配列を削除する必要があります。