[英]Extract fields from object present in multiple nested levels using jq
我有一个文本文件,其数据记录如下:
{"input":{"payload":{"id":"rec1","var2":"imp_val1","var3":"","var4":"000000"},"recordName":"typeABC"}}
{"input":{"recordName":"typeBCD","payload":{"var5":"val_var66","recordType":"typeA","id":"rec2","var2":"imp_val2","var3":"","var4":"000000"}}}
{"recordName":"typeEFG","payload":{"var5":"val_var55","recordType":"typeA","id":"rec3","var2":"imp_val3","var3":"","var4":""}}
{"payload":{"id":"rec4","var2":"imp_val4","var3":"","var4":"000000"},"recordName":"typeABC"}
有一个记录名称和有效负载键,其中包含我感兴趣的值。 一些记录被包装在另一个键输入中。 我想从所有这些记录中提取 id 和 var2 到一个新的 csv 文件中。
我想如果数据格式是统一的,我可以这样做:
cat file | jq -r "[.payload.id, .payload.var2] | @csv" > newFile
或者
cat file | jq -r "[.input.payload.id, .input.payload.var2] | @csv" > newFile
任何指针?
由于payload
object 嵌套在每个 object 的多个级别中,因此您可以应用递归下降..
如果密钥不存在则忽略
jq -r '..| .payload? // empty | [ .id, .var2 ] | @csv' file
顺便说一句,我也认为以下工作:
jq -r 'if .input then .input.payload else .payload end | [.id, .var2] | @csv' file > newFile
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.