Разница между файлом cat.txt | sort -u и cat файл.txt | uniq

Вы можете сделать это с помощью утилиты rsв чистом режиме транспонирования(-T)-, если вы сначала правильно разместите ввод, т.е.

$ sed -e 's/./& /g' -e 's/ $//' file
a b c d e
f g h i j
k l m n
o p q r s

(или, если у вас есть GNU sed, вы можете использовать sed 's/./ &/2g'; другой вариант — использовать циклsed -E ':a; s/([^ ])([^ ])/\1 \2/; ta'); затем

$ sed -e 's/./& /g' -e 's/ $//' file | rs -Tng0
afko
bglp
chmq
dinr
ej s

Важными опциями являются:

  • -Tчистое транспонирование
  • -nзаполнить нулевые записи
  • -g0установите для ширины выходного поля (между -расстояние между столбцами )на ноль

В качестве альтернативы можно выполнить разделение ввода с помощью awkс пустым разделителем полей ввода и разделителем полей вывода по умолчанию:

awk '{$1=$1} 1' FS= file | rs -Tng0
0
25.08.2019, 16:54
2 ответа

Строго говоря, uniqне требует сортированного ввода -, но это правда, что uniqудалит только последовательные повторяющиеся строки.

Разница в том, что:

  • sortсортирует файл, а (с помощью опции -u)также может удалять повторяющиеся строки, которые теперь будут следовать друг за другом, поскольку они были отсортированы.

  • uniqудаляет повторяющиеся строки подряд. Он также имеет опции для вывода только повторяющихся строк(по одной каждой с -dили всех дубликатов с-D)и может выводить подсчет того, сколько раз строка появлялась в строке. ввод(-c). У него также есть другие параметры для управления обнаружением дубликатов, такие как пропуск полей и сравнение только N символов в строке.

  • вывод sort, конечно, может быть передан в uniq, если вы хотите объединить функции обоих.

sort -uполезен, когда вы либо не заботитесь о сохранении порядка входного файла, либо действительно хотите, чтобы он был отсортирован -, но не хотите, чтобы на выходе были дубликаты.

uniqполезен, когда требуется сохранить порядок ввода или когда вам нужны только последовательные дубликаты -, например. когда вы хотите uniq уже -отсортированный файл (не нужно тратить ЦП и IOPS на повторную сортировку ); или удалить все, кроме одного, последовательные переводы строки между абзацами (например, pdftotextчасто создает много пустого пространства между строками или абзацами-uniqможно удалить лишнее, облегчая чтение или редактирование ).

4
28.01.2020, 02:14

uniqтребует, чтобы ввод был уже отсортирован. Дубликаты, которые не появляются последовательно, не будут устранены :

.
~ printf %s\\n 1 2 1 | uniq
1
2
1
~ printf %s\\n 1 2 1 | sort | uniq
1
2
~ printf %s\\n 1 2 1 | sort -u
1
2
4
28.01.2020, 02:14

Теги

Похожие вопросы