Monday, 9 May 2011

Почему sort так тормозит?

Дано - файл на 300 мб с кучей абсолютных путей в Linux, каждый на отдельной строке, присутствует юникод, задача - отсортировать как можно быстрее:

Стандартный подход
time sort -u /var/log/backup/2011-05-09.log > sort_standard

real 2m4.258s
user 2m3.716s
sys 0m0.344s

Хитрый вариант:
time LC_ALL=C sort -u /var/log/backup/2011-05-09.log > sort_fast

real 0m10.781s
user 0m8.965s
sys 0m0.548s

Результаты:
md5sum sort_fast
a1a339709059142d8700a2314481544b sort_fast

md5sum sort_standard
7a8ea0f6f1bdccc6fd0551b49aa3c99c sort_standard

wc -l sort_fast
295038 sort_fast

wc -l sort_standard
291784 sort_standard


ls -alh | grep sort
-rw-r--r-- 1 root root 30M 2011-05-09 02:55 sort_fast
-rw-r--r-- 1 root root 30M 2011-05-09 02:55 sort_standard

Подозрения, что побились имена в UTF-8 в результате такой сортировки, но не уверен, у кого идеи, как быстро это узнать?

Источник: http://ranadip.wordpress.com/2010/03/12/tech-trivia-linux-unusually-slow-performance-of-grepsortother-text-processing-commands/

1 comment:

  1. Например так
    diff -y sort_fast sort_standard | grep '|'

    ReplyDelete

Note: only a member of this blog may post a comment.