UNIX sort -m命令的空间优化?

时间:2011-09-02 20:27:59

标签: bash unix sorting

我正在尝试运行排列测试,该测试涉及将一千个非常大的预排序文件合并到一个大型排序文件中。

当前运行的文件比我通常合并的文件要大(每个68M到106M)。

我没有足够的硬盘空间用于输入,临时中间产品和输出。有没有办法使用sort破坏性地合并所有这些文件?

这是我目前正在使用的命令:

sort -T /media/WD_Book/tmp --compress-program=gzip -g -k 6 -m *.rand.tab > /media/WD_Book/output/merged.rand.tab

(文件编号为0001.rand.tab1000.rand.tab,排序键在第6列中为指数表示法[因此-k 6-g]。)

我知道可以在原地运行非合并sort,但该联机帮助页明确说它不适用于-m

1 个答案:

答案 0 :(得分:1)

也许就是这样(警告:可能会擦除数据。)

touch merged.rand.tab  # Create a zero-sized result file
for file in [0-9]*.rand.tab; do
   sort -k 6 -g -m merged.rand.tab $file > result.rand.tab
   rm -f merged.rand.tab
   mv result.rand.tab merged.rand.tab
   # you can rm $file if space is really scarce.
done

基本上是时空交换空间。您一次合并一个文件与前一个合并的结果。此外,您可以删除已合并的文件。

再次,在尝试之前备份您的数据。 ; - )