gzip - 是否可以直接用 jq 读取 gzip 文件?
问题描述
我正在阅读巨大的 json 文件jq
,例如:
jq -r '[.a, .b, .time] | @tsv' file.txt
这些文件以文件的形式出现gz
,我每天花 20 分钟来处理gunzip
它们。我想知道是否可以jq
直接从gz
格式中读取文件?如果是这样,总体上会更快还是会减慢我的进程?
解决方案
如果解压需要 20 分钟,那么无论库是被使用gunzip
还是被jq
.
但是,您可以避免将解压缩的文件写入磁盘以及与此相关的时间。这将通过使用gunzip -c
.
gunzip -c file.gz | jq -r '[ .a, .b, .time ] | @tsv' >file.tsv
需要明确的是,以上使用最少的内存。任何时候都无法在内存中完整地找到这三个文件(压缩、解压缩或 TSV)中的任何一个。
以下演示了 的流式传输性质jq
:
$ (
j='{"a": "a", "b": "a", "time": "20210210T10:10:00"}'
printf '%s\n' "$j"
printf '%s\n' "$j"
sleep 4
printf '%s\n' "$j"
) | jq -r '[ .a, .b, .time, now ] | @tsv'
a a 20210210T10:10:00 1620305187.460741
a a 20210210T10:10:00 1620305187.460791
[4 second pause]
a a 20210210T10:10:00 1620305191.459734
前两条记录立即发出,第三条在 4 秒后发出。这反映在时间戳上。
推荐阅读
- java - 如何使用 Java 获取存储在 Azure KeyVault 中的证书
- hive - 是否有 Hive 2 独立元存储解决方案?
- ios - 使用百分比填充 UIView
- javascript - Vue-router 只显示基本路由
- excel - 如何在具有过滤器的数据透视表(Excel for Mac)中获得不同的计数?
- android - SPI驱动,搜索从哪里开始
- excel - 如何在数据透视表中的多列小计中找到百分比
- ios - 在 Swift 中使用 WillSpeakRange 委托中断 AVSpeechUtterance 并恢复
- html - 可访问性:输入元素可访问性的帮助文本
- php - Composer 自动加载某些子文件夹中缺少的类