我刚刚在一个小时前发布的一个问题中向JQ介绍过,我正在解析一个非常大的数据库,但是JQ输出看起来像这样:
"removedforprivacy@gmail.com"
"john"
"smith"
null
null
"123 road st"
null
"Columbia"
"29203"
"SC"
null
相反,我希望它看起来像这样:
"removedforprivacy@gmail.com"
"john"
"smith"
null
null
"123 road st"
null
"Columbia"
"29203"
"SC"
null
甚至更好:
"removedforprivacy@gmail.com","john","smith",null,null,"123,road,st",null,"Columbia","29203","SC",null
我目前正在使用此命令:
jq -c '(.email, .first_name, .last_name, .ip, .address, .address1, .address2, .city, .zip, .state, .phone)' file.json > file2.json
我也尝试过使用这个命令:
jq -compact-output '(.email, .first_name, .last_name, .ip, .address, .address1, .address2, .city, .zip, .state, .phone)' file.json > file2.json
但是file2.json仍然会显示如下数据:
"removedforprivacy@gmail.com"
"john"
"smith"
null
null
"123 road st"
null
"Columbia"
"29203"
"SC"
null
简而言之,我想将输出转换为看起来像csv或csv的东西,这样我就可以更好地管理它。
该命令不起作用,只需要一次使用此命令。
答案 0 :(得分:0)
如果你想要CSV,那么你当然可以简单地使用@csv
过滤器,但是@csv
会将null
转换为空字段:
"removedforprivacy@gmail.com","john","smith",,,"123 road st",,"Columbia","29203","SC",
要按照您想要的方式处理字符串和null
,您可以将@tsv
与-r命令行选项结合使用,如下所示:
map(if type == "string" then "\"\(.)\"" else "null" end)
| @tsv | gsub("\t";",")
根据您的输入,这会产生:
"removedforprivacy@gmail.com","john","smith",null,null,"123 road st",null,"Columbia","29203","SC",null
对于其他变体,您可能希望使用join/1
和/或-j命令行选项。
正如手册所述:
使用此选项将导致更紧凑的输出,而不是将每个JSON对象放在一行上。
这里" JSON对象"意味着" JSON实体"。