如何使用JQ将多个字段连接到同一行 [英] How to concat multiple fields to same line with jq
本文介绍了如何使用JQ将多个字段连接到同一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我运行:
cat <file> | jq
我得到:
{
"user": "alex",
"num": "486",
"time": "Thu Jun 6 16:26:06 PDT 2019",
"pwd": "/Users/alex/codes/ores/prompt-command",
"pid": 11047,
"exit_code": 0,
"cmd": "echo '123'"
}
{
"user": "john",
"num": "487",
"time": "Thu Jun 6 16:26:24 PDT 2019",
"pwd": "/Users/alex/codes/ores/prompt-command",
"pid": 11108,
"exit_code": 5,
"cmd": "echo '456'"
}
{
"user": "alex",
"num": "488",
"time": "Thu Jun 6 16:26:59 PDT 2019",
"pwd": "/Users/alex/codes/ores/prompt-command",
"pid": 11141,
"exit_code": 5,
"cmd": "echo '789'"
}
但我只需要如下所示的输出,而不是所有这些字段:
alex echo '123'
alex echo '789'
所以我试了一下:
cat <file> | jq -r '.user .cmd'
但这不起作用,我收到以下错误:
JQ:Error(at:63):无法索引字符串为"cmd"的字符串
我还想对其进行过滤,以便只看到我的命令,类似于:
cat <file> | jq -r '.user=alex .cmd'
推荐答案
使用@tsv
生成以制表符分隔的值作为输出:
jq -r '[.user, .cmd] | @tsv' <yourfile
...根据您的输入文件:
alex echo '123'
john echo '456'
alex echo '789'
...但是,如果您只筛选您的用户帐户,则可以直接打印cmd
,因为用户值是已知的:
jq -r 'select(.user == "alex") | .cmd'
这篇关于如何使用JQ将多个字段连接到同一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文