如果我运行:
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): Cannot index string with string "cmd"
我还想过滤它,只看到我的命令,类似这样:
cat <file> | jq -r '.user=alex .cmd'
grep
是否足够?虽然不太美观,但至少可以获取您关心的两行。 - noah<
重定向)通常是更好的形式。对于像sort
或tail
这样受益于可寻址性的工具来说,你可以获得巨大的性能差异。(cat hugefile | tail -n 1
会从头到尾读取hugefile
,即使它只需要最后一行;<hugefile tail -n 1
直接跳到结尾。cat somefile | sort
必须按顺序从第一行到最后一行读取文件进行排序;sort <somefile
可以有并行子进程对文件的子集进行排序。 - Charles Duffy