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

Простым обходным решением является использование корневого файла crontab вместо вашего собственного. Отредактируйте его:

$ sudo crontab -e

вместо:

$ crontab -e
6
01.08.2017, 16:09
4 ответа

Похоже, это хорошая работа дляperl:

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

Сgawk:

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

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

7
27.01.2020, 20:21

Вот общий способ с последними версиями 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
3
27.01.2020, 20:21

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
0
27.01.2020, 20:21

Теги

Похожие вопросы