【发布时间】:2019-08-25 21:09:41
【问题描述】:
我有这个json:
{"temperature":"21", "humidity":"12.3", "message":"Today ID 342 is running"}
我想用jq来获取这个json:
{"temp":"21", "hum":"12.3", "id":"342"}
如您所见,我要做的是提取 ID 号 342 并将其放入具有不同键名的新 json 中。我想我应该使用正则表达式,但我不知道如何在 jq 语法中插入它。
我可以使用基本命令创建另一个 json:
cat old.json | jq '{temp:.temperature,hum:.humidity, id:.message}' > new.json
我知道我可以使用方括号选择子字符串,但我不想使用它们,因为它们不考虑具有不同长度和结构的字符串。我想使用正则表达式,因为我知道 ID 号总是在“ID”部分之后。
【问题讨论】:
-
仅供参考,使用
<old.json比使用cat old.json更好。与jq略有不同,但命令受益于能够使用seek()和tell()从文件的不同部分读取,跳到最后,并行线程之间的操作,在恒定时间内测量长度,或者做任何其他可以用真实文件句柄做但不能用 FIFO 做的事情,性能差异可能很大。 -
...例如,
cat foo | wc -c会从头一直读取foo,但<foo wc -c不会读取任何文件的内容根本,但直接跳到末尾并执行一个恒定时间的操作来请求它的当前位置。类似地,GNUsort可以将一个巨大的文件并行排序到子进程中,每个子进程处理一个子集并将它们的结果合并在一起——但是如果给它一个管道来读取,那么读取输入的过程根本就不能并行化!