我在比较一长串名字时遇到问题。
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