1

Представьте, что есть 3 текстовых файла.

1.txt:

a
b
c

2.txt:

f
c
d

3.txt:

b
c
f

Как мне отсортировать их по частоте каждой "строчки"? (В случае коллизий по алфавиту)

Результат:

c
b
f
a
d

2 ответа2

4

Вы можете использовать sort и uniq для сортировки линий по частотам.

sort *.txt | uniq -c | sort -k1,1nr -k2 | sed 's/^ *[0-9]* //'

Вторая sort использует вторичную -k2 для сортировки строк одинаковой частоты по алфавиту. Последний sed просто удаляет частоты.

1

Вы можете сортировать в порядке убывания частоты, используя sort и uniq:

$ sort *.txt | uniq -c | sort -rn
      3 c
      2 f
      2 b
      1 d
      1 a

Если вы хотите удалить количество:

$ sort *.txt | uniq -c | sort -rn | sed 's/[[:space:]]*[[:digit:]]*[[:space:]]//'
c
f
b
d
a

Обратите внимание, что требуется два вызова для sort . Во-первых, потому что uniq -c требует отсортированного ввода. Второе необходимо для сортировки строк в порядке убывания числа по частоте.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .