Вы можете сделать это с помощью утилиты 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
Строго говоря, uniq
не требует сортированного ввода -, но это правда, что uniq
удалит только последовательные повторяющиеся строки.
Разница в том, что:
sort
сортирует файл, а (с помощью опции -u
)также может удалять повторяющиеся строки, которые теперь будут следовать друг за другом, поскольку они были отсортированы.
uniq
удаляет повторяющиеся строки подряд. Он также имеет опции для вывода только повторяющихся строк(по одной каждой с -d
или всех дубликатов с-D
)и может выводить подсчет того, сколько раз строка появлялась в строке. ввод(-c
). У него также есть другие параметры для управления обнаружением дубликатов, такие как пропуск полей и сравнение только N символов в строке.
вывод sort
, конечно, может быть передан в uniq
, если вы хотите объединить функции обоих.
sort -u
полезен, когда вы либо не заботитесь о сохранении порядка входного файла, либо действительно хотите, чтобы он был отсортирован -, но не хотите, чтобы на выходе были дубликаты.
uniq
полезен, когда требуется сохранить порядок ввода или когда вам нужны только последовательные дубликаты -, например. когда вы хотите uniq уже -отсортированный файл (не нужно тратить ЦП и IOPS на повторную сортировку ); или удалить все, кроме одного, последовательные переводы строки между абзацами (например, pdftotext
часто создает много пустого пространства между строками или абзацами-uniq
можно удалить лишнее, облегчая чтение или редактирование ).
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