Как получить только один элемент перестановки из списка строк

Я хочу сохранить только одну перестановку среди набора строк и посчитать возникновение каждой перестановки.

Чтобы сделать вещи более понятными, я хочу преобразовать (например)

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 является хеш-таблицей, ключи - строки отсортированных символов, значения - количество вхождений: увеличено (++) при каждой встрече
  • }{ "Эскимосское приветствие" - отделяет код для запуска после исчерпания ввода
Другие вопросы по тегам