Представьте, что есть 3 текстовых файла.
1.txt:
a
b
c
2.txt:
f
c
d
3.txt:
b
c
f
Как мне отсортировать их по частоте каждой "строчки"? (В случае коллизий по алфавиту)
Результат:
c
b
f
a
d
Вы можете использовать sort
и uniq
для сортировки линий по частотам.
sort *.txt | uniq -c | sort -k1,1nr -k2 | sed 's/^ *[0-9]* //'
Вторая sort
использует вторичную -k2
для сортировки строк одинаковой частоты по алфавиту. Последний sed
просто удаляет частоты.
Вы можете сортировать в порядке убывания частоты, используя 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
требует отсортированного ввода. Второе необходимо для сортировки строк в порядке убывания числа по частоте.