Переставьте буквы и сравните два слова.

Переставьте буквы и сравните два слова.

У меня возникла проблема при сравнении длинного списка имен.

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

Связанный контент