Como obter apenas um item da permutação de uma lista de strings

4

Eu quero manter apenas uma permutação entre um conjunto de strings e contar a ocorrência de cada permutação.

Para tornar as coisas mais claras, quero transformar (por exemplo)

ab
acf
ba
cfa
acf

em

2 ab
3 acf

em que 2 e 3 são o número de permutações de {a, b} e {a, c, f}, respectivamente.

Como você faria isso no bash da maneira mais direta possível?

    
por user123456 06.12.2016 / 13:50

1 resposta

7

Perl para o resgate!

perl -lne '$h{ join "", sort split // }++ }{ print "$h{$_} $_" for keys %h' < input_file
  • -n lê a linha de entrada por linha
  • -l remove novas linhas da entrada, adiciona novas linhas à saída
  • split // divide a string em caracteres
  • sort classifica-os (portanto, exclusividade)
  • join "" cria de volta uma única string da lista de caracteres
  • %h é uma tabela de hash, chaves são as strings de caracteres ordenados, valores são números de ocorrências: aumentada ( ++ ) em cada encontro
  • }{ "Cumprimento de esquimó" - separa o código para ser executado após o esgotamento da entrada
por choroba 06.12.2016 / 14:00