2011-09-02 41 views
1

我试图运行一个排列测试,其中涉及将一千个非常大的预排序文件合并为一个大型排序文件。UNIX sort -m命令的空间优化?

当前运行的文件甚至比我通常合并的文件还要多(每个文件为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.tab通过1000.rand.tab和排序关键是在指数表示法中第6列[从而-k 6-g]。)

我知道可以在原地运行非合并sort,但该手册页明确指出它不适用于-m

+0

如果没有中介,你能存储输入和输出吗?如果这些文件是预先分类的,你可以破解一些perl/c/python来进行合并。如果没有,您可以逐一合并它们并删除残余物。 –

+0

如何将文件0001复制到一个名为“huge”的文件中,删除0001,将0002连接成“huge,删除0002等等,然后对1和唯一的大文件进行排序? –

回答

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 

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

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

+0

我会合并最短或者,假设所有1000个文件的大小相似,并将它们成对合并或组合成10个。 – Neil

+0

您可以通过按大小对输入文件进行排序来近似前者\ for \ ls -Sr [0-9] *。rand.tab \'IIRC。 –