我有一个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的操作的命令来说,性能差异可能会很大。 - Charles Duffycat foo | wc -c
将从开头读取foo
的所有内容,但<foo wc -c
根本不会读取文件的任何内容,而是直接跳到结尾并执行一个常数时间操作来请求其当前位置。同样,GNUsort
可以将对大型文件的排序并行化为每个处理子集的子进程,并合并它们的结果--但如果给它提供一个要读取的管道,则输入读取过程根本无法并行化! - Charles Duffy