【发布时间】:2021-03-24 08:31:50
【问题描述】:
我正在尝试连接并输出一个对象中的两个字段,但我得到的是笛卡尔积
我的输入数据(data1.json)
{"name":"asdf","loc":"lxd2","mem":332320768}
{"name":"ghjk","loc":"lxd1","mem":307908608}
{"name":"qwer","loc":"lxd1","mem":1195794432}
{"name":"tyui","loc":"lxd2","mem":269889536}
{"name":"zxcv","loc":"lxd1","mem":1578475520}
{"name":"bnml","loc":"lxd2","mem":48967680}
我想生成一个按 loc 分组的输出,其中包含 loc 作为标题和 name + mem 下面的字段。如果我只尝试我得到的名字:
jq -rs 'group_by(.loc)[] | ([.[].loc] | first) + " ---------------------",("\(.[].name)") ' /tmp/data1.json
lxd1 ---------------------
ghjk
qwer
zxcv
lxd2 ---------------------
asdf
tyui
bnml
到目前为止一切都很好,但是一旦我尝试添加第二个字段,它就会产生笛卡尔积:
$ jq -rs 'group_by(.loc)[] | ([.[].loc] | first) + " ---------------------",("\(.[].name) \(.[].mem/1024/1024|floor)") ' /tmp/data1.json | less
lxd1 ---------------------
ghjk 293
qwer 293
zxcv 293
ghjk 1140
qwer 1140
zxcv 1140
ghjk 1505
qwer 1505
zxcv 1505
lxd2 ---------------------
asdf 316
tyui 316
bnml 316
asdf 257
tyui 257
bnml 257
asdf 46
tyui 46
bnml 46
我想要的是:
lxd1 ---------------------
ghjk 293
qwer 1140
zxcv 1505
lxd2 ---------------------
asdf 316
tyui 257
bnml 46
我在这里做错了什么?
【问题讨论】:
-
nos, 293, 1140 是从哪里来的?