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 perl
aquí:
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 file
donde el primer campo es el mismo que el segundo después de esoreorganizar.
Respuesta2
GNU extendidoAWK
solució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