긴 이름 목록을 비교하는 데 문제가 있습니다.
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
GNU 확장AWK
해결책:
샘플 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