Ограничение размера файла превышено в bash

Я пробовал этот сценарий оболочки на сервере SUSE 10, ядре 2.6.16.60, файловой системе ext3.

Сценарий имеет такую ​​строку:

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

Размер файла составляет около 3,2 ГБ, и появляется следующее сообщение об ошибке: File size limit exceeded .

В этой оболочке ulimit -f неограничен.

После того, как я сменил сценарий на это:

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

проблема ушла.

Я не знаю, почему, может ли кто-нибудь помочь мне с объяснением?

См. Дублирующий вопрос в serverfault:

Версия для труб требует еще много временных файлов. Вы можете быстро проверить это с помощью утилиты 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", 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/'