我有很多名为xaa.gz,xab.gz,xac.gz等的大型压缩文件。不幸的是,它们没有排序。我想做以下等效的工作。
zcat x*|sort > largefile
split -l 1000000 largefile
然后gzip分割文件,并丢弃之前制作的所有其他文件。
问题在于这将生成大量未压缩的文件,然后生成许多较小的未压缩拆分文件,然后再压缩它们。是否可以在整个过程中不做一个大文件,而在压缩过程中也可以在不压缩文件的情况下理想地保存这些文件呢?
我有8个核心,所以我也想利用它们(我没有coreutils 8.20,所以不能利用sort --parallel)。
不是完整的代码,而是有关您可以在此处执行的操作的一些想法。
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'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句