在bash中超出文件大小限制

我已经在SUSE 10服务器,内核2.6.16.60,ext3文件系统上尝试了这个shell脚本

脚本有这样的问题:

cat file | awk '{print $1" "$2" "$3}' | sort -n > result 

该文件的大小约为3.2G,我得到这样的错误消息:超过文件大小限制

在这个shell中,ulimit -f是无限的

我把脚本改成这个之后

 cat file | awk '{print $1" "$2" "$3}' >tmp sort -n tmp > result 

问题没有了。

我不知道为什么,有谁能帮我解释一下?

pipe道版本需要更多的临时文件。 你可以用strace工具快速检查一下。

pipe道版本使用快速爆炸的临时文件数量:

 for i in {1..200000} ; do echo $i ; done |strace sort -n |& grep -e 'open.*/tmp/' open("/tmp/sortb9Mhqd", O_RDWR|O_CREAT|O_EXCL, 0600) = 3 open("/tmp/sortqKOVvG", O_RDWR|O_CREAT|O_EXCL, 0600) = 3 open("/tmp/sortb9Mhqd", O_RDONLY) = 3 open("/tmp/sortqKOVvG", O_RDONLY) = 4 

文件版本不使用相同数据集的临时文件。 对于更大的数据集,它使用的临时文件非常less。

 for i in {1..200000} ; do echo $i ; done >/tmp/TESTDATA ; strace sort -n /TMP/TESTDATA |& grep -e 'open.*/tmp/'