首页 > 解决方案 > jq 选择条件

问题描述

我有一个日志文件,想从中获取数据,所以我使用 Jq 按参数过滤一些数据。

正如我上面所说,我将根据传递给 Jq 的参数过滤数据

详情:

我的日志文件的结构:

 {
    city: "",
    phone_number: "",
    address: "",
    zip_code: "",
    person : {
        name: "",
        sex: "",
        ...
    }
 }

我的预期是我想忽略用于过滤的属性,如果是emptynull

例如:

cat my_log_file.log | jq -r --arg city ${city} --arg name ${name}  'select(.city == $city and .person.name == $name)'

使用上面的命令,如果${city}我传递的参数是empty或者null我想删除带有城市的过滤器并只使用名称过滤

我试过了,但还是不行

标签: jsonselectcommand-line-argumentsjq

解决方案


要检查一个值,比如 $value,是null还是"",可以这样写:

$value == null or $value == ""

所以你可以通过使用这个 jq 程序来实现你想要的:

def agrees(value): 
  value == null or value == "" or . == value;

select( (.city | agrees($city)) and
        (.person.name | agrees($name)) )

推荐阅读