У меня возникла проблема при сравнении длинного списка имен.
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