Reorganize as letras e Compare duas palavras

0

Eu tenho um problema para comparar uma longa lista de nomes.

RamaKrishna  KrishnaRama 
IndiaUS      USIndia

devem ser comparados e devem ser declarados como iguais.

Eu queria resolver isso reorganizando todos os caracteres em cada palavra em ordem alfabética como esta

adiiNSU adiiNSU

e depois comparando cada palavra. Como posso fazer isso usando o script bash?

    
por Rama Krishna Majety 23.11.2017 / 07:53

2 respostas

2

Solução GNU estendida AWK :

Amostra inputfile contents:

RamaKrishna  KrishnaRama 
IndiaUS      USIndia
UkraineMotherland RepublicUkraine
awk 'BEGIN{ PROCINFO["sorted_in"]="@str_val_asc" }
     { 
         len=split($1,w1,""); split($2,w2,""); asort(w1); asort(w2); not_eq=0; 
         for (i=1; i<=len; i++) if (w2[i]=="" || w1[i] != w2[i]) { not_eq=1; break } 
         print $0,"-",(not_eq? "not equal":"equal") 
     }' inputfile

A saída:

RamaKrishna  KrishnaRama  - equal
IndiaUS      USIndia - equal
UkraineMotherland RepublicUkraine - not equal
    
por 23.11.2017 / 09:07
4

Eu usaria perl aqui:

perl -Mopen=locale -lane '
  sub rearrange {
    return join "", sort split("", $_[0])
  }
  print if rearrange($F[0]) eq rearrange($F[1])' < file

Imprimiria essas linhas de file em que o primeiro campo é o mesmo que o segundo depois desse rearranjo .

    
por 23.11.2017 / 16:53