Ordnen Sie die Buchstaben neu an und vergleichen Sie zwei Wörter

Ordnen Sie die Buchstaben neu an und vergleichen Sie zwei Wörter

Ich habe ein Problem damit, eine lange Liste von Namen zu vergleichen.

RamaKrishna  KrishnaRama 
IndiaUS      USIndia

verglichen und als gleich erklärt werden.

Ich wollte dies lösen, indem ich alle Buchstaben in jedem Wort alphabetisch neu anordnete, so

adiiNSU adiiNSU

dann jedes Wort vergleichen. Wie kann ich das mit einem Bash-Skript machen?

Antwort1

Ich würde perlhier verwenden:

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

Würde die Zeilen drucken, filebei denen das erste Feld mit dem zweiten identisch ist, danachUmstellen.

Antwort2

Erweitertes GNUAWKLösung:

Beispielinhalte 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

Die Ausgabe:

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

verwandte Informationen