Это тип работы linux, "созданный для".
Сначала вы должны разделить файл на множество файлов меньшего размера:
split -l 100 filename
После этого у вас есть несколько вариантов с двумя командами sort / uniq, и после того, как вы рассчитали 8 различных опций с файлом с 1 миллионом IP-адресов из файла журнала обмена рекламой, вы обнаружили почти 20-кратную разницу между использованием LC_ALL = С или нет. Например:
LC_ALL=C sort IP_1m_rows.txt > temp_file
LC_ALL=C uniq temp_file > IP_unique_rows.txt
real 0m1.283s
user 0m1.121s
sys 0m0.088s
Где то же самое без LC = ALL_C:
sort IP_1m_rows.txt > temp_file
uniq temp_file > IP_unique_rows.txt
real 0m24.596s
user 0m24.065s
sys 0m0.201s
Передача команды и использование LC_ALL = C было в 2 раза медленнее, чем самый быстрый:
LC_ALL=C sort IP_1m_rows.txt | uniq > IP_unique_rows.txt
real 0m3.532s
user 0m3.677s
sys 0m0.106s
Базы данных бесполезны для одноразовых заданий, подобных этой, и плоские файлы позволят вам удивительным образом справиться даже с более сложными / долгосрочными задачами.