我在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
问题消失了.
我不知道为什么,有人可以帮我解释一下吗?
管道版本需要更多临时文件.
您可以使用strace实用程序快速检查.
您可以使用strace实用程序快速检查.
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",0600) = 3 open("/tmp/sortb9Mhqd",O_RDONLY) = 3 open("/tmp/sortqKOVvG",O_RDONLY) = 4
文件版本不使用同一数据集的临时文件.
对于更大的数据集,它使用极少的临时文件.
for i in {1..200000} ; do echo $i ; done >/tmp/TESTDATA ; strace sort -n /TMP/TESTDATA |& grep -e 'open.*/tmp/'