shell – bash中超出文件大小限制

前端之家收集整理的这篇文章主要介绍了shell – 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

问题消失了.

我不知道为什么,有人可以帮我解释一下吗?

管道版本需要更多临时文件.
您可以使用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/'

猜你在找的Bash相关文章