長い名前のリストを比較するのは困難です。
RamaKrishna KrishnaRama
IndiaUS USIndia
比較され、等しいと宣言されるものとする。
私は各単語のすべての文字をアルファベット順に並べ替えることでこれを解決したいと思いました
adiiNSU adiiNSU
次に各単語を比較します。これを bash スクリプトを使用して実行するにはどうすればよいですか。
答え1
ここでは以下を使用しますperl
:
perl -Mopen=locale -lane '
sub rearrange {
return join "", sort split("", $_[0])
}
print if rearrange($F[0]) eq rearrange($F[1])' < file
file
最初のフィールドが2番目のフィールドと同じである行を出力します。並べ替え。
答え2
拡張GNUAWK
解決:
サンプル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
出力:
RamaKrishna KrishnaRama - equal
IndiaUS USIndia - equal
UkraineMotherland RepublicUkraine - not equal