给定两个管道分隔的文本文件:
文件1:
data1|data2|data3|data4
文件2:
label1|label2|label3|label4
我希望创建这样的json输出:
{ "label1": "data1", "label2": "data2", "label3": "data3", "label4": "data4" }
我已经走了这么远:
jq -R -s 'rtrimstr("n") | split("|") | to_entries | reduce .[] as $o ({}; .["field" + ($o.key+1|tostring)] |= $o.value )'
它只是增加fieldx标签;标签";文件,这是我的主要目标。
{ "field1": "data1", "field2": "data2", "field3": "data3", "field4": "data4" }
我意识到有很多方法可以做到这一点,但我希望能和jq一起学习。
提前感谢您的任何提示!
极简主义者"减少自由";解决方案,为了清晰起见,这里分布在多条线上:
jq -Rn '
[inputs|split("|")]
| transpose
| map({(.[0]): .[1]})
| add' labels.psv data.psv
多条数据线
以下处理多条数据线,并且也更健壮:
jq -nR '
# From the web:
def objectify($keys):
[$keys, .] | transpose | map({(.[0]): .[1]}) | add;
(input|split("|")) as $keys
| inputs | split("|") | objectify($keys)
' labels.psv data.psv