我有一个包含100000个结果的大JSON文件。我知道如何使用'JQ'
进行基本解析。
{
"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"
}
但是在这个JSON文件中,我希望以CSV
格式获取“检测到”和“结果”等字段。我知道如何使用JQ单独获取它。
我试过了,
$ 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
而不是#3,我希望输出为
true , Trojan.Win32.Generic!BT
true , FileCryptor.NJX
true , Generic.Ransom.Purge.DC87C66E
有关如何获得结果的任何建议?
答案 0 :(得分:3)
@csv将从一个平面数组转换为CSV,所以这应该让你开始:
jq -r '[.detected, .result] | @csv'
根据您的样本输入,这将产生:
true,"Trojan.Win32.Generic!BT"
true,"FileCryptor.NJX"
true,"Generic.Ransom.Purge.DC87C66E"
如果要删除引号,请考虑:
jq -r '"\(.detected), \(.result)"'
答案 1 :(得分: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
sed
N
命令读取下一行,将两行连接在一起。
s
命令正在将换行符\n
替换为所需的模式,
。
答案 2 :(得分: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