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 perl
hier 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, file
bei denen das erste Feld mit dem zweiten identisch ist, danachUmstellen.
Antwort2
Erweitertes GNUAWK
Lö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