我有很多大型压缩文件,名为xaa.gz,xab.gz,xac.gz等。不幸的是它们没有排序。我想做相同的以下内容。
zcat x*|sort > largefile
split -l 1000000 largefile
然后gzip拆分文件并丢弃之前制作的所有其他文件。
问题是这会产生一个大量的未压缩文件,然后是许多较小的未压缩分割文件,然后压缩它们。是否有可能在整个过程中没有创建一个巨大的文件,理想情况下在压缩之前不保存拆分文件?
我有8个内核,所以我也想利用它们(我没有coreutils 8.20因此无法利用sort -parallel)。
答案 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'