计算在jq中处理的记录数

时间:2018-07-18 18:54:04

标签: json stream jq reduction memory-efficient

我开始玩jq,现在当我在与输入的每个对象进行交互时尝试增加字段值时卡住了。

输入文件具有:

{"a" : "test1", "b" : 0}
{"a" : "test2", "b" : 0}
{"a" : "test3", "b" : 0}

PS:没有数组,每行只有1个对象。

所需的输出:

{"a" : "test1", "b" : 0}
{"a" : "test2", "b" : 1}
{"a" : "test3", "b" : 2}

我发现了几个例子,展示了如何处理数组,但没有一个像这样。

谢谢!

2 个答案:

答案 0 :(得分:2)

jq 1.5具有inputs,这为有效的解决方案打开了大门:

jq -nc '
  foreach inputs as $x (-1; .+1; 
    . as $n | $x | .["b"] = $n)' stream.json
{"a":"test1","b":0}
{"a":"test2","b":1}
{"a":"test3","b":2}

答案 1 :(得分:0)

找到了:)

$ cat input.json |
  jq -sc 'reduce range(0,length) as $i ( .; .[$i].b = ($i+1)) |.[]'
{"a":"test1","b":1}
{"a":"test2","b":2}
{"a":"test3","b":3}