【发布时间】:2020-12-01 17:31:52
【问题描述】:
我正在将一些带有 JQ 的 JSON 重新格式化为 TSV 文件。我可以仅使用值创建 TSV,但我无法弄清楚如何将单行包含键值作为列标题?
示例输入:
{
"id":"1234",
"host":"6789",
"proto":"UDP",
"location":"Boston",
"timestamp":"2020-12-01T14:18:45.717Z",
"src_ip":"192.168.3.70",
"dest_ip":"8.8.8.8",
"dest_port":53,
"message":"Some Information",
"severity":1,
"details":"Some Details",
"categories":["a","b","c"]
}
期望的输出:
"location\ttimestamp\tsrc_ip\tdest_ip\tdest_port"
"Boston\t2020-12-01T15:13:16.242Z\t10.8.25.63\t10.8.1.3\t445"
"Atlanta\t2020-12-01T15:11:15.929Z\t10.8.25.63\t10.80.1.3\t445"
"Chicago\t2020-12-01T15:09:45.271Z\t10.34.196.12\t10.8.1.3\t445"
这句话让我很接近:
cat input.json | jq '. | to_entries
| map(select(.key=="timestamp"), select(.key=="location"), select(.key=="src_ip"), select(.key=="dest_ip"), select(.key=="dest_port"))
| map(.key), map(.value)
| @tsv'
但标题行在输出中重复:
"location\ttimestamp\tsrc_ip\tdest_ip\tdest_port"
"Boston\t2020-12-01T15:13:16.242Z\t10.8.25.63\t10.8.1.3\t445"
"location\ttimestamp\tsrc_ip\tdest_ip\tdest_port"
"Atlanta\t2020-12-01T15:11:15.929Z\t10.8.25.63\t10.80.1.3\t445"
有没有办法只打印第一行的键,然后只打印剩余行的值,只使用 JQ?
【问题讨论】:
-
我猜这是同一个问题,但对于 CSV 所以你也许可以适应它...stackoverflow.com/questions/30015555/…