Отсортировка файла функцией sort()

DarkMatter

Новичок
Здравствуйте!
Есть текстовый файл размером 1Гб.
При попытке его отсортировать функцией sort(), пишет, что не хватает озу, хотя его у меня 2Гб и при запуске скрипта 1,8Гб свободно.
Вот эта ошибка:
PHP Fatal error: Allowed memory size of 1694498816 bytes exhausted (tried to allocate 113 bytes) in /var/www/sortData.php on line 8
Вот сам скрипт;
PHP:
<?php
	set_time_limit(0);
	ini_set('memory_limit', '1800M');
	$fn = '/home/user/data.txt';
	$f = fopen($fn,'r') or die('no open file '.$fn);
	$arr = array();
	while(!feof($f)){
	  $arr[] = fgets($f);
	}
	fclose($fn);
	sort($arr);
	$fsort = fopen('/home/user/sortData.txt','w+') or die('no file fsortData');
	foreach($arr as $data){
	  fwrite($fsort, $data);
	}
?>
Затем решил его разбить на 2 части по 500Мб. Та же ошибка.
Дальше разбил на 4 части по 250Мб. Та же ошибка.
И когда при разбиении его на 8 частей по 125Мб произошло то же самое, уже решил спросить у других, какими способами возможно решить эту задачу.

Ещё хочу сказать, что недавно использовал этот же скрипт на Windows c 1Гб ОЗУ и спокойно отсортировал файл в 280Мб. Сейчас у меня стоит Ubuntu установлен LAMP.
 

DarkMatter

Новичок
Насколько понял эту функцию. Она разрешает использовать скрипту ОЗУ до 1800Мб.
Уже запутался. Расскажите всё таки, что делает функция ini_set('memory_limit', '320M') и как устанавливать лимиты на компе по использованию его ресурсов, потому, что сделав вот так:
PHP:
<?php
     ini_set('memory_limit', '320M');
     phpinfo();
     // дальше идёт мой скрипт сортировки файла
?>
в разделе Core выдаёт такой результат:
Directive Local Value Master Value
memory_limit 320M 128M

и прочитав вот эту статью. На практике получается совершенно всё по другому, а именно выдаёт ту же ошибку ( PHP Fatal error: Allowed memory size of 1694498816 bytes exhausted (tried to allocate 113 bytes) in /var/www/sortData.php on line ) , которой по идее не должно быть, т.к. указано, что больше 320Мб использовалось запрещено.
 

DarkMatter

Новичок
Благодарю всех кто откликнулся.

Использовал решение предложенное ~WR~ ,т.к. оно оказалось для меня самое лучшее. Когда запустил свой скрипт на сортирование 1Гб файла, использовалось 750Мб ОЗУ.
PHP:
<?php
  $sortNameFile = 'UnixSort.txt'; // имя отсортированного файла
  $f = fopen('/home/user/'.$sortNameFile, 'w+') or die(' no open file : '.$sortNameFiles); // создаю новый ф-л
  fclose($f);
  exec('sort /home/user/myFile1Gb.txt>'.$sortNameFile);
?>
 
Сверху