2016-04-05 4 views
2

Ich habe eine Ausgabe von json-Format wie untenParsen json Objekt Spalte in Linux

{ 
"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." 
} 

ich brauche Werte von Land und Stadt, wie unten

CN  Beijing 

i unter jq Befehl verwendet habe und sed Befehl, um Land anzuzeigen, aber nicht, wie man Stadt als andere Spalte anzeigt.

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' 

Der Ausgang dieses Land und Stadt Spalten sollte unter

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 
bis 4. & 5. Spalte einer anderen CSV-Datei Probe hinzugefügt werden
+0

'jq -j '.country," ", .city," \ n "''? Dann 'Paste andere_Datei jq_output'? –

Antwort

2
curl -s ipinfo.io/0.0.0.0 | jq -r '.country +"\t"+ .city' 
+0

Verwenden Sie stattdessen [String-Interpolation] (https://stedolan.github.io/jq/manual/#Stringinterpolation-\%28foo%29). Es wird viel sauberer sein. –

1

Da Sie die "andere Datei" nicht zur Verfügung gestellt haben, um die Ausgabe zu diesem hinzuzufügen oder Details darüber anzugeben, wie Sie das tun wollen, ist nicht klar, was Sie damit machen wollen, damit es Ihnen bleibt ...

+1

Danke Ed, es half auch – Sasee

0

können Sie zunächst auf zwei Felder, die Sie in in ein Array interessiert sind gestellt:

$ curl -s ipinfo.io | jq '[.country, .city]' 
[ 
    "US", 
    "Mountain View" 
] 

Und dann zu csv konvertieren mit @csv:

$ curl -s ipinfo.io | jq '[.country, .city] | @csv' 
"\"US\",\"Mountain View\"" 

Die -r (raw) Argument reinigt einige dieser Entkommen up:

$ curl -s ipinfo.io | jq -r '[.country, .city] | @csv' 
"US","Mountain View" 

Sie dann paste die Ausgabe mit einer anderen Datei kombinieren können.