提问人:Matias 提问时间:9/11/2020 最后编辑:phoMatias 更新时间:9/14/2020 访问量:869
在 gz 文件上加速 sed
Speed up sed on a gz file
问:
我正在使用脚本来处理文件并以这种方式删除文本:sed
gzip -cd /data/file.gz | sed 's/WITH (appendonly=true, compresstype=quicklz)//' | gzip > file_seeded.gz
对大文件(例如 50GB)执行操作需要花费大量时间。我这样做的方式是最佳方式,还是有其他方法可以加快该过程?
答:
2赞
Mark Adler
9/12/2020
#1
无法避免重新压缩编辑后的数据,这会占用执行时间。我所能建议的就是使用或加速压缩,但代价是输出稍大。您还可以使用 pigz 来使用您的所有内核。gzip -1
gzip -3
2赞
Ole Tange
9/14/2020
#2
使用您可以附加多个 gzip 文件的事实:
mysed() {
sed 's/WITH (appendonly=true, compresstype=quicklz)//' | gzip
}
export -f mysed
gzip -cd /data/file.gz | parallel --pipe -k --block 50M mysed > file_seeded.gz
进行调整,直到找到最有效的值。这取决于 /tmp 的 I/O 速度以及您拥有的 RAM 和 CPU 缓存量。最佳值很可能在 1M 到 1000M 之间。50M
如果时间比磁盘空间更重要,请使用 。gzip -1
上一个:检查数组是否具有值
评论
sed
LC_ALL=C sed '...'
xargs
gnu-parallel
sed
| gzip > outFile
sed