Как получить только один элемент перестановки из списка строк
Я хочу сохранить только одну перестановку среди набора строк и посчитать возникновение каждой перестановки.
Чтобы сделать вещи более понятными, я хочу преобразовать (например)
ab
acf
ba
cfa
acf
в
2 ab
3 acf
где 2 и 3 - число перестановок {a,b} и {a,c,f} соответственно.
Как бы вы сделали это в bash самым прямым способом?
1 ответ
Решение
Perl на помощь!
perl -lne '$h{ join "", sort split // }++ }{ print "$h{$_} $_" for keys %h' < input_file
-n
читает входные данные построчно-l
удаляет новые строки из ввода, добавляет новые строки в выводsplit //
разбивает строку на символыsort
сортирует их (отсюда уникальность)join ""
создает обратно одну строку из списка символов%h
является хеш-таблицей, ключи - строки отсортированных символов, значения - количество вхождений: увеличено (++
) при каждой встрече}{
"Эскимосское приветствие" - отделяет код для запуска после исчерпания ввода