Использование sort -u
делает меньше операций ввода-вывода, чем sort | uniq
, но конечный результат тот же. В частности, если файл достаточно велик для того, чтобы sort
должен был создавать промежуточные файлы, вполне вероятно, что sort -u
будет использовать немного меньшее или немного меньшее количество промежуточных файлов, поскольку это может устранить дубликаты при сортировке каждого набора. Если данные сильно дублируют друг друга, это может быть полезно; если на самом деле есть несколько дубликатов, это не будет иметь большого значения (безусловно, эффект производительности второго порядка по сравнению с эффектом первого порядка канала).
Обратите внимание, что есть время, когда уместен трубопровод. Например:
sort FILE | uniq -c | sort -n
Это сортирует файл по порядку количества вхождений каждой строки в файле, причем самые повторяющиеся строки появляются последними. (Меня не удивит, что эта комбинация, идиоматическая для Unix или POSIX, может быть объединена в одну сложную команду sort с сортировкой GNU.)
Бывают случаи, когда важно не использовать трубу. Например:
sort -u -o FILE FILE
Это сортирует файл «на месте»; то есть выходной файл указывается с помощью -o FILE
, и эта операция гарантированно безопасна (файл читается перед перезаписью для вывода).