Bash UNIX sort-m命令的空间优化?
我正在尝试运行一个排列测试,它涉及到将一千个非常大的预排序文件合并成一个巨型排序文件 当前运行的一些文件甚至比我通常合并的文件还要大(每个68M到106M) 我没有足够的硬盘空间同时用于输入、临时中间产品和输出。有没有一种方法可以使用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
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