вызов uniq и сортировка в разных порядках в оболочке - PullRequest
2 голосов
/ 10 сентября 2009

Есть ли разница в порядке uniq и сортировки при вызове их в сценарии оболочки? я говорю здесь о времени и пространстве.

grep 'somePattern' | uniq | sort

против

grep 'somePattern' | sort | uniq

быстрый тест на текстовом файле размером 140 тыс. Строк показал небольшое улучшение скорости (5,5 с против 5,0 с) для первого метода (получить значения uniq, а затем отсортировать)

Я не знаю, как измерить использование памяти, хотя

Вопрос теперь в следующем: имеет ли значение порядок? или это зависит от возвращенных greplines (много / мало дубликатов)

Я с нетерпением жду ваших ответов

Ответы [ 3 ]

9 голосов
/ 10 сентября 2009

Я считаю, что sort -u подходит для этого точного сценария, и будет как сортировать, так и унифицировать вещи. Очевидно, это будет более эффективно, чем индивидуальные звонки sort и uniq в любом порядке.

8 голосов
/ 10 сентября 2009

Единственный правильный заказ - это uniq после sort, поскольку на странице man для uniq написано:

Отменить все, кроме одной из последовательных идентичных строк из INPUT (или стандартного ввода), записав в OUTPUT (или стандартный вывод).

Следовательно, это должно быть

grep 'somePattern' | sort | uniq
2 голосов
/ 10 сентября 2009

uniq зависит от элементов, которые сортируются для удаления дубликатов (поскольку он сравнивает предыдущий и текущий элемент), поэтому сортировка всегда выполняется перед uniq. Попробуйте и посмотрите.

...