bash 超出文件大小限制

bash 超出文件大小限制

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

该脚本有这样一行:

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

该文件的大小约为 3.2G,我收到以下错误消息:File size limit exceeded

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

我将脚本更改为以下内容后:

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

问题就解决了。

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

答案1

服务器故障中的重复问题:

管道版本需要更多的临时文件。您可以使用以下命令快速检查斯特雷斯公用事业。

管道版本使用数量快速增长的临时文件:

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

文件版本不使用同一数据集的临时文件。对于更大的数据集,它使用的临时文件极少。

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

相关内容