如何使用JQ将多个字段连接到同一行 [英] How to concat multiple fields to same line with jq

查看:17
本文介绍了如何使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆