我有一个json格式的输出,如下所示
{
"ip": "0.0.0.0",
"hostname": "No Hostname",
"city": "Beijing",
"region": "Beijing Shi",
"country": "CN",
"loc": "39.9289,116.3883",
"org": "AS55967 Beijing Baidu Netcom Science and Technology Co., Ltd."
}
我需要国家和城市的价值如下
CN Beijing
我使用了以下jq命令和sed命令来显示国家但不知道如何将城市显示为另一列。
JQ
curl -s ipinfo.io/0.0.0.0 | jq '.country'
SED
curl -s ipinfo.io/0.0.0.0 | sed '/country/!d' | sed s/\"country\":\ //g | sed 's/\"//g' | sed 's/\,//g'
此国家/地区和城市列的输出应添加到第4和第4列。
下面另一个csv文件样本的第5列2016-03-29 00:05:23 0.0.0.0 CN Beijing 10.0.0.197
2016-03-29 00:56:37 1.1.1.1 FR France 10.0.1.117
2016-03-29 00:57:20 2.2.2.2 FR France 10.0.0.197
答案 0 :(得分:1)
$ cat tst.awk
BEGIN { FS="\": \""; OFS="\t" }
{ gsub(/^"|",$/,""); f[$1] = $2 }
/}/ { print f["country"], f["city"]; delete f }
$ awk -f tst.awk file
CN Beijing
由于您没有提供“其他文件”来添加此输出或提供有关您希望如何执行此操作的任何详细信息,因此不清楚您要对此做什么,所以它留给您。
答案 1 :(得分:1)
curl -s ipinfo.io/0.0.0.0 | jq -r '.country +"\t"+ .city'
答案 2 :(得分:0)
您可以先将您感兴趣的两个字段添加到数组中:
$ curl -s ipinfo.io | jq '[.country, .city]'
[
"US",
"Mountain View"
]
然后使用@csv
转换为csv:
$ curl -s ipinfo.io | jq '[.country, .city] | @csv'
"\"US\",\"Mountain View\""
-r
(raw)参数清除了一些转义:
$ curl -s ipinfo.io | jq -r '[.country, .city] | @csv'
"US","Mountain View"
然后,您可以使用paste
将输出与另一个文件合并。