如何在不使用临时文件的情况下合并排序文件?

Mat*_*vid 11 unix sorting command-line temporary-files

我正在尝试合并UNIX/Linux脚本中的许多已排序文件sort -m,我注意到sort首先将结果写入临时文件,然后将其复制到目标.我的理解-m是它假定文件是排序的,所以使用临时文件是完全没必要的,它浪费了硬盘空间和CPU周期(我sort在管道中使用,等待排序输出任何东西.)有没有办法告诉sort合并排序文件时不使用临时文件?或者更好的版本没有?

确切的CL看起来像:

$ sort -m -s -t '_' -k 1,1n -k 2,2n <(gunzip <file_1) [...] <(gunzip <file_n) | gzip >output
Run Code Online (Sandbox Code Playgroud)

我正在使用sortGNU coreutils 5.97.

Mar*_*cin 5

从中检查这些选项man sort,它们可能使您最小化合并所需的空间。

--batch-size=NMERGE  
Run Code Online (Sandbox Code Playgroud)

一次最多合并NMERGE输入;更多使用临时文件

--compress-program=PROG 
Run Code Online (Sandbox Code Playgroud)

用PROG压缩临时文件;用PROG -d解压它们

  • 它确实解决了问题。您必须将`--batch-size`设置为高于要合并的文件数。我有31个文件要合并,并且没有指定该选项,它开始使用临时文件。当设置`--batch-size = 31`时,它立即开始写入输出而没有临时文件。 (3认同)