重新排列字母並比較兩個單字

重新排列字母並比較兩個單字

我在比較一長串名字時遇到問題。

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

擴充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

相關內容