json - jq 选择条件
问题描述
我有一个日志文件,想从中获取数据,所以我使用 Jq 按参数过滤一些数据。
正如我上面所说,我将根据传递给 Jq 的参数过滤数据
详情:
我的日志文件的结构:
{
city: "",
phone_number: "",
address: "",
zip_code: "",
person : {
name: "",
sex: "",
...
}
}
我的预期是我想忽略用于过滤的属性,如果是empty
或null
。
例如:
cat my_log_file.log | jq -r --arg city ${city} --arg name ${name} 'select(.city == $city and .person.name == $name)'
使用上面的命令,如果${city}
我传递的参数是empty
或者null
我想删除带有城市的过滤器并只使用名称过滤
我试过了,但还是不行
解决方案
要检查一个值,比如 $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)) )
推荐阅读
- java - Java继承:为什么不调用子类的方法?
- laravel - laravel nova 登录后路由重定向
- linux - GTK2 vs. GTK3:在 bash 脚本中检测 GTK3 主题
- spring - 如何在 Spring 响应式中执行“onErrorFlatMap”之类的操作并保持“错误轨道”?
- xml - 如何在列表框中保留一定数量的项目
- python - 如何从导入的 csv 在 QGIS 中创建 pandas 数据框?
- java - 插入数据库的 Java 注释
- excel - 在公式中查找和替换字符串
- react-native - React Native 和 microsoft android 模拟器
- c# - 尽管有 FileShare.Read 选项,应用程序中的 FileStream 仍无法访问被服务锁定的文件