Почему утилита uniq дает неожиданные результаты? [закрыто]

Это можно сделать разными способами, с помощью многих инструментов, например. с awk следующим образом:

cat f.txt | awk 'BEGIN{ORS="\\|"}1' 

@don_cristi правильно заметил, что «Это будет печатать конечный символ \| и не будет завершать новую строку», так что вот версия, которая исправляет оба, если это необходимо для вашего использования -case:

awk 'p{printf "%s\\|",p} {p=$0} END{print p}'
0
27.12.2018, 02:17
1 ответ

Вы не сортируете файл перед его фильтрацией. Из справочной страницы:

Примечание: uniq не обнаруживает повторяющиеся строки, если они не являются смежными. Вы можете сначала отсортировать ввод или использовать sort -u без uniq. Кроме того, сравнения соблюдают правила, указанные в LC_COLLATE.

Вам также необходимо обработать все строки, которые вы хотите подсчитать, за один раз. В настоящее время вы обрабатываете типы файлов по одному, поэтому uniq -c правильно говорит вам, что у вас есть по одному из каждого типа — он всегда видит только один тип файла за раз.

file * | sort | uniq -c

было бы более подходящим (предположительно с более конкретным глобусом или даже списком файлов для обработки).

5
28.01.2020, 02:16

Теги

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