나는 다음과 같은 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
주변 배열을 삭제해야 합니다.