2017-02-27 11 views
2

大きなJSONファイルが100000件あります。私は'JQ'で基本的な解析を行う方法を知っています。 JQで複合JSONファイルを解析する問題

{ 
    "detected": true, 
    "result": "Trojan.Win32.Generic!BT", 
    "update": "20170115", 
    "version": "1.5.0.42" 
} 
{ 
    "detected": true, 
    "result": "FileCryptor.NJX", 
    "update": "20170115", 
    "version": "16.0.0.4749" 
} 
{ 
    "detected": true, 
    "result": "Generic.Ransom.Purge.DC87C66E", 
    "update": "20170115", 
    "version": "1.0.1.9" 
} 

virus.json

しかし、このJSONファイル上で、私はそのようなCSV形式で「検出」と「結果」などのフィールドを取得したいと思います。私はJQを使ってそれを個別に取得する方法を知っています。

Iは、代わりに3位の

$ jq -r ".detected" virus.json 

true 
true 
true 
$ jq -r ".result" dum_1.json 

    Trojan.Win32.Generic!BT 
    FileCryptor.NJX 
    Generic.Ransom.Purge.DC87C66E 
jq -r ".detected,.result" dum_1.json 
true 
Trojan.Win32.Generic!BT 
true 
FileCryptor.NJX 
true 
Generic.Ransom.Purge.DC87C66E 

を試みたが、私は、出力が

ようになりたいです

出力

true , Trojan.Win32.Generic!BT 
true , FileCryptor.NJX 
true , Generic.Ransom.Purge.DC87C66E 

結果を取得する方法上の任意の提案?

答えて

2

@csvはCSVにフラットな配列から変換しますので、これはあなたが始める必要があります:あなたのサンプル入力を考えると

jq -r '[.detected, .result] | @csv' 

を、これが生成されます。

true,"Trojan.Win32.Generic!BT" 
true,"FileCryptor.NJX" 
true,"Generic.Ransom.Purge.DC87C66E" 

あなたの場合引用符を削除したい場合:

jq -r '"\(.detected), \(.result)"' 
+0

ありがとう#Peak。それは魅力として働く! – Arun

1

あなたはsedを使用することができます。

jq -r ".detected,.result" dum_1.json | sed 'N;s/\n/ , /' 
true , Trojan.Win32.Generic!BT 
true , FileCryptor.NJX 
true , Generic.Ransom.Purge.DC87C66E 

sedNコマンドは、一緒に2行の連結、次の行を読んでください。

sコマンドは、改行\nを希望のパターン,に置き換えています。

+0

ありがとうou #Oliv。 – Arun

1
jq -r ".detected,.result" dum_1.json |awk -v OFS=, 'NR%2{x=$0;next} {print x OFS $0}' 
true,Trojan.Win32.Generic!BT 
true,FileCryptor.NJX 
true,Generic.Ransom.Purge.DC87C66E 
+0

ありがとう#PS。 – Arun