对大量压缩文件进行排序

时间:2013-08-08 11:40:39

标签: bash sorting compression

我有很多大型压缩文件,名为xaa.gz,xab.gz,xac.gz等。不幸的是它们没有排序。我想做相同的以下内容。

zcat x*|sort > largefile

split -l 1000000 largefile

然后gzip拆分文件并丢弃之前制作的所有其他文件。

问题是这会产生一个大量的未压缩文件,然后是许多较小的未压缩分割文件,然后压缩它们。是否有可能在整个过程中没有创建一个巨大的文件,理想情况下在压缩之前不保存拆分文件?

我有8个内核,所以我也想利用它们(我没有coreutils 8.20因此无法利用sort -parallel)。

1 个答案:

答案 0 :(得分:2)

不是完整的代码,而是关于你可以在这里做什么的一些想法。

1)分区输入文件以并行处理它们:

num_cores=8
i=0
while read f; do
  part_name=part$i
  set $part_name="${!part_name} $f"
  (( i=(i+1)%num_cores ))
done < <(ls x*.gz)

2)对不同进程中的某些文件进行解压缩和排序:

sort -m <(zcat $part0 | sort) <(zcat $part1 | sort) ...

3)告诉split立即压缩文件:

... | split -l 1000000 --filter='gzip > $FILE.gz'