文字を並べ替えて2つの単語を比較する

文字を並べ替えて2つの単語を比較する

長い名前のリストを比較するのは困難です。

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

関連情報