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

Bash UNIX sort-m命令的空间优化?,bash,unix,sorting,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/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列以指数表示[因此
-k6
-g
]

我知道可以在适当的位置运行非合并
排序
,但手册中明确指出,它不适用于
-m

可能是这种方式(警告:可能会擦除数据)

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

同样,请在尝试之前备份数据。;-)

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

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


同样,请在尝试之前备份数据。;-)

如果没有中介,您是否可以存储输入和输出?如果对文件进行了预排序,您可以去掉一些perl/c/python来进行合并。如果不是的话,你可以一个接一个地合并它们并删除剩余部分。把文件0001复制到一个名为“巨大”的文件中,删除0001,将0002连接到“庞大、删除0002等等,然后对1和唯一的巨大文件进行排序?如果没有中间人,您是否可以存储输入和输出?如果对文件进行了预排序,您可以去掉一些perl/c/python来进行合并。如果不是的话,你可以一个接一个地合并它们并删除剩余部分。把文件0001复制到一个名为“巨大”的文件中,删除0001,将0002连接到“巨大,删除0002等等,然后对1和唯一的巨大文件进行排序?如果可能的话,我会在每一步将最短的两个文件合并在一起。或者,假设所有1000个文件的大小都相似,并将它们成对或10组合并。您可以通过按大小排序输入文件来近似前者。对于'ls-Sr[0-9]*.rand.tab`IIRC.中的文件,如果可能的话,我会在每一步将最短的两个文件合并在一起。或者,假设所有1000个文件的大小都相似,并将它们成对或10组合并。您可以通过按大小排序输入文件来近似前者。对于'ls-Sr[0-9]*.rand.tab`IIRC中的文件。
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