使用jq将管道文件转换为json并插入标签



给定两个管道分隔的文本文件:

文件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

最新更新