2014-08-31 95 views
0

我有这样的代码在一个字符串,删除重复的字符:删除重复的字符

awk -v FS="" '{ 
    for(i=1;i<=NF;i++)str=(++a[$i]==1?str $i:str) 
} 
END {print str}' <<< "AABBCC" 

结果是:

ABC

这正是我想要的是;但问题是当我传递一个变量时,它会删除重复的字母,但它不会更新变量的值。例如:

KEY=AABBCC 
awk -v FS="" '{ 
    for(i=1;i<=NF;i++)str=(++a[$i]==1?str $i:str) 
} 
END {print str}' <<< "$KEY" 
echo the new key is: $KEY 

结果是:

ABC

新的关键是:AABBCC

我怎样才能拿到钥匙的更新版本?

+0

您只需要将awk命令的结果再次分配给变量。 'KEY = $(awk ...)' – 2014-08-31 13:28:24

+0

@EtanReisner对不起,我没注意到。当我重写代码时,这是一个错误。 – Alladin 2014-08-31 13:33:00

+0

这是我在之前的评论中对他的回应。显然你的原代码正在工作。 – 2014-08-31 13:33:32

回答

3

试试这个:

KEY=AABBCC 
KEY=$(awk -v FS="" '{ for(i=1;i<=NF;i++)str=(++a[$i]==1?str $i:str) } END {print str}' <<< "$KEY") 
echo $KEY 

输出:

ABC 
2

您需要awk命令的输出赋值给变量,像这样:

KEY=AABBCC 
KEY=$(awk -v FS="" '{ 
    for(i=1;i<=NF;i++)str=(++a[$i]==1?str $i:str) 
} 
END {print str}' <<< "$KEY") 
echo the new key is: $KEY 

将导致 the new key is: ABC