Должен ли я использовать трубопровод или перенаправление для ввода в «сортировку»,

я хочу делать

awk -F "," '{print $1 }' inputfile1.txt | sort -u > distinctOutput.txt 

Это хорошая производительность? Или мне нужно перенаправить / использовать временный файл, так как я думаю, что лучше сделать сортировку до тех пор, пока awk не будет сбрасывать полный вывод? Или это позаботится о себе?

(AIX 6.1)

2 Solutions collect form web for “Должен ли я использовать трубопровод или перенаправление для ввода в «сортировку»,”

Я думаю, что sort автоматически использует временные файлы. Temparies упоминаются в нескольких местах в man и info страницах для sort , в том числе:

  --compress-program=PROG compress temporaries with PROG; decompress them with PROG -d -T, --temporary-directory=DIR use DIR for temporaries, not $TMPDIR or /tmp; multiple options specify multiple directories 

Если задана переменная среды TMPDIR, сортировка использует ее значение как каталог для временных файлов вместо / tmp. Опция -temporary-directory (-T), в свою очередь, переопределяет переменную окружения.


Чтобы проверить, я побежал:

 base64 < /dev/urandom | sort 

Использование памяти base64 и sort быстро стабилизировалось ( top -bn1 | grep 'base64|sort' ):

 21877 root 20 0 11.1m 0.6m 0.5m R 63.9 0.0 7:23.46 base64 21878 root 20 0 21.4m 8.2m 0.8m R 31.9 0.4 4:44.15 sort 

И я мог видеть сотни временных файлов в /tmp называемых sortXXXXXX :

 $ ls /tmp/sort* | head /tmp/sort03IIcQ /tmp/sort052vXK /tmp/sort07ZCcO /tmp/sort09yrTN /tmp/sort0anX08 /tmp/sort0BruPR /tmp/sort0EgCYY /tmp/sort0GsbQs /tmp/sort0hCMDD /tmp/sort0hdSMT $ ls /tmp | grep -c sort 1990 

Итак, я бы сказал, что вам не нужно беспокоиться о временных файлах с sort . Лучшее, что вы можете сделать, это обеспечить, чтобы расположение временных файлов находилось в быстрой файловой системе (SSD, или tmpfs и т. Д.).

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я рассматривал только GNU.


Хотя вышеупомянутый анализ будет применяться только к сортировке GNU, в AIX- sort также используются временные файлы или, по крайней мере, каталог для временных файлов в соответствии с руководством по подключению. У меня нет системы AIX, пригодной для ее тестирования.

POSIX не упоминает временные файлы, поэтому это не заданный.

Я тестировал поведение с огромным файлом (разделенные запятой, csv, 2173762 строк, 186MB)

awk piped to sort дает мне, 49611 syscalls и:

 real 0m5.134s user 0m5.048s sys 0m0.080s 

awk во временный файл, а затем sort файл на 2-м шаге, дает мне 49719 syscalls и:

 real 0m6.006s user 0m5.836s sys 0m0.152s 

Даже в другом случае, sort ( sort -k1 -u ) сначала и pipe to awk дают мне более худший результат (47533 syscalls):

 real 0m17.937s user 0m17.565s sys 0m0.348s 

Вывод : кажется, вы уже нашли наиболее удобный для ressource метод, или я не могу найти более быстрый.

  • awk: mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
  • sort: sort (GNU coreutils) 8.13
  • Почему `ls` перечисляет следующие файлы в, казалось бы, разных порядках?
  • бездисковый поиск дубликатов имен файлов
  • sort и ls - почему не заглавные буквы отсортированы в первую очередь?
  • Выполнение команды для каждого файла в папке в случайном порядке
  • Одна командная строка оболочки, которая находит всех студентов в LEC05 и печатает свое имя в отсортированном порядке
  • Сортировка вывода find -exec ls
  • сортировка имен файлов численно, когда у них есть нечисловой префикс
  • Поиск файлов, содержащих строку, и список их имен, отсортированных по дате изменения
  • сортировать файл по длине столбца / строки
  • Перемещение строки с выхода на фронт вывода или пользовательское переупорядочение
  • Сортировка вывода ls, где файлы заканчиваются цифрами
  • Linux и Unix - лучшая ОС в мире.