Как найти количество неупорядоченных пар из списка

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

Другими словами, у меня есть список:

ab ba ac bc 

и я хочу отобразить:

 2 ab 1 ac 1 bc 

  • Как удалить повторяющиеся строки в большом текстовом файле с несколькими GB?
  • Удаление строк с одним общим полем
  • Групповая команда uniq?
  • Удалите повторяющиеся строки с помощью twist
  • `uniq` не в режиме реального времени, когда
  • Самый простой способ подсчета строк, соответствующих определенным шаблонам, включая «0», если строка не найдена?
  • Удалить почти дублированные строки
  • Почему эта команда не сортируется на основе индекса uniq?
  • 4 Solutions collect form web for “Как найти количество неупорядоченных пар из списка”

    Это звучит неплохо для perl :

     perl -F -lane '$count{join "", sort @F}++; END{print "$count{$_} $_" for sort keys %count}' < your-file 

    С gawk :

     gawk -F '' '{ print ($1 > $2) ? $2$1 : $1$2 }' | sort | uniq -c 

    Каждое поле соответствует одному символу ( -F '' ). Мы просто инвертируем символы, если первая больше второй в соответствии с текущей локалью (что не имеет значения). Затем мы сортируем результат и подсчитываем одинаковые последовательные строки с uniq -c .

    Вот общий способ с последними версиями GNU awk:

     gawk -i join ' { split($0, F, //) asort(F) h[join(F, 1, length(F), SUBSEP)]++ } END { asorti(h, x) for(k in h) print h[k], k }' infile 

    Или как отдельный скрипт:

    order.awk

     @include "join" { split($0, F, //) asort(F) h[join(F, 1, length(F), SUBSEP)]++ } END { asorti(h, x) for(k in h) print h[k], k } 

    Выполните его следующим образом:

     gawk -f order.awk infile 

    Вывод:

     2 ab 1 ac 1 bc 

    fish раковина:

     ⋊> ~ echo 'ab ba ac bc' | while read line; echo -n "$line" | sed -r 's|(.)|\1\n|g' | sort | xargs | tr --delete ' '; end | uniq -c 

    оболочка bash :

     bash-3.2$ echo 'ab ba ac bc' | while read line; do echo -n "$line" | sed -r 's|(.)|\1\n|g' | sort | xargs | tr --delete ' '; done | uniq -c 

    Вывод:

      2 ab 1 ac 1 bc 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.