【问题标题】:How to extract interval/range of rows from compressed file?如何从压缩文件中提取行的间隔/范围?
【发布时间】:2017-02-13 08:04:37
【问题描述】:

如何从 1 亿行 *.gz 文件返回行间隔?

假设我需要 5 百万行,从 1500 万到 2000 万行?

这是表现最好的选择吗?

zcat myfile.gz|head -20000000|tail -500
real    0m43.106s
user    0m43.154s
sys     0m9.259s

【问题讨论】:

  • zcat file | awk 'NR>14999999 && NR < 2000001{if (NR > 20000001) exit}' > outfile 可能会快一点。

标签: linux zcat


【解决方案1】:

这是一个完全合理的选择;因为你不知道一行会有多长,所以你基本上必须解压缩并迭代这些行以找出行分隔符的位置。这三个工具都经过了相当程度的优化,因此 I/O 和解压缩时间可能无论如何都会占主导地位。

理论上,推出您自己的解决方案,将所有三个工具组合在一个可执行文件中可能会节省一点(通过降低 IPC 的成本),但节省的成本可能微不足道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多