Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 仅当对象与上一个使用jq的元素不同时才选择该对象_Bash_Jq - Fatal编程技术网

Bash 仅当对象与上一个使用jq的元素不同时才选择该对象

Bash 仅当对象与上一个使用jq的元素不同时才选择该对象,bash,jq,Bash,Jq,目标是仅当对象的值与前一个对象不同时才打印该对象 想象一下这个json: [ { "date": "10-03-20", "value": 3 }, { "date": "11-03-20", "value": 3 }, { "date": "12

目标是仅当对象的值与前一个对象不同时才打印该对象

想象一下这个json:

[
   {
      "date": "10-03-20",
      "value": 3
   },   
   {
      "date": "11-03-20",
      "value": 3
   },   
   {
      "date": "12-03-20",
      "value": 3
   },   
   {
      "date": "13-03-20",
      "value": 8
   },   
   {
      "date": "14-03-20",
      "value": 8
   },   
   {
      "date": "15-03-20",
      "value": 5
   }
]
预期产出应为:

[
   {
      "date": "10-03-20",
      "value": 3
   }, 
   {
      "date": "13-03-20",
      "value": 8
   },  
   {
      "date": "15-03-20",
      "value": 5
   }
]
仅当
与上一个对象不同时才打印对象

这就是我开始对jq所做的:

[foreach .[] as $row (null;
    select($row.value != $lastValue) | $row.value
    $lastValue = $row.value
    )]

当然,这是行不通的,我不能像这样在jq中使用variable,我不知道这是否是一个好方法。

在这里使用
reduce
可能比使用
foreach
更容易:

reduce .[] as $x (null;
    if . == null then [$x]
    elif .[-1].value == $x.value then .
    else . + [$x] end)
使用foreach的解决方案 作为参考,这里有一个使用
foreach
的解决方案。关键思想是使用foreach的state变量来存储您可能在另一种语言中使用的“局部变量”

[ foreach .[] as $x ({};
    if .prev == $x.value then .emit = null
    else {prev: $x.value, emit: $x}
    end;
    select(.emit).emit ) ]