Reorganiza las letras y compara dos palabras.

Reorganiza las letras y compara dos palabras.

Tengo un problema al comparar una larga lista de nombres.

RamaKrishna  KrishnaRama 
IndiaUS      USIndia

Se compararán y se declararán iguales.

Quería resolver esto reorganizando todos los caracteres de cada palabra alfabéticamente así

adiiNSU adiiNSU

Luego comparando cada palabra. ¿Cómo puedo hacer esto usando el script bash?

Respuesta1

Yo usaría perlaquí:

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

Imprimiría esas líneas filedonde el primer campo es el mismo que el segundo después de esoreorganizar.

Respuesta2

GNU extendidoAWKsolución:

Contenido de muestra inputfile:

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

La salida:

RamaKrishna  KrishnaRama  - equal
IndiaUS      USIndia - equal
UkraineMotherland RepublicUkraine - not equal

información relacionada