Límite de tamaño de file excedido en bash

He intentado este script de shell en un server SUSE 10, kernel 2.6.16.60, ext3 filesystem.

El script tiene una línea como esta:

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

El tamaño del file es aproximadamente 3.2G y aparece el siguiente post de error: File size limit exceeded .

En este shell, ulimit -f es ilimitado.

Después de cambiar el script en esto:

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

el problema se ha ido.

No sé por qué, ¿alguien puede ayudarme con una explicación?

Ver pregunta duplicada en serverfault:

La versión de tubería necesita muchos más files temporales. Puede inspeccionar esto rápidamente con la utilidad strace .

La versión de tubería utiliza una rápida explosión de files temporales:

 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 

La versión del file no utiliza files temporales para el mismo set de datos. Para sets de datos más grandes utiliza extremadamente less files temporales.

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