글자를 다시 정렬하고 두 단어를 비교하세요.

글자를 다시 정렬하고 두 단어를 비교하세요.

긴 이름 목록을 비교하는 데 문제가 있습니다.

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

관련 정보