json - 如何在大型 json 文件中获取日期字段的最大值?
问题描述
我有一个大约 500MB 的大型 JSON 文件,它是 URL 调用的响应。我需要使用 shell 脚本(bash)在“结果”数组中的 JSON 文件中获取“日期”字段的最大值。目前使用 jq 作为below.Below 适用于较小的文件,但对于较大的文件,它返回 null。
maxDate=$(cat ${jsonfilePath} | jq '[ .results[]?.date ] | max')
请帮忙。谢谢!我是 shell 脚本、json、jq 的新手。
样本/输入 json 文件内容:
{
"results": [
{
"Id": "123",
"date": 1588910400000,
"col": "test"
},
{
"Id": "1234",
"date": 1588910412345,
"col": "test2"
}
],
"col2": 123
}
解决方案
给定命令行上的 --stream 选项,JQ 不会将整个输入加载到内存中,而是会逐个读取输入标记,以这种方式生成数组:
[["results",0,"Id"],"123"]
[["results",0,"date"],1588910400000]
...
[["results",1,"date"],1588910412345]
...
由于这个特性,我们可以date
从输入中只选择 s 并找出最大值,而不会耗尽内存(以牺牲速度为代价)。例如:
jq -n --stream 'reduce (inputs|select(.[0][-1]=="date" and length==2)[1]) as $d (null; [.,$d]|max)' file
推荐阅读
- java - 使用 verifyPreComputedHash() 方法的 Java Card 3.0.5 构建错误
- javascript - 按名称查找列并删除列
- c - 在工作队列中使用 spin_lock() 与 down_interruptible()
- r - 具有重复值的两个向量之间的“设置差异”
- mysql - 在 MySql 表上批量执行 UPDATE 比逐个执行 UPDATE 更快吗?
- php - codeigniter 上传 Excel 并在视图中显示内容
- java - Spring批处理MongoItemReader忽略数据库索引(通过Spring Data创建)
- python - 设置异常时避免递归
- asp.net - 无法在项目绑定功能上使用中继器项目
- oracle - Oracle 触发器:在更新时插入事务实体新行,插入帐户实体