我正在尝试运行排列测试,该测试涉及将一千个非常大的预排序文件合并到一个大型排序文件中。
当前运行的文件比我通常合并的文件要大(每个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 :(得分: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
基本上是时空交换空间。您一次合并一个文件与前一个合并的结果。此外,您可以删除已合并的文件。
再次,在尝试之前备份您的数据。 ; - )