2014-08-31 111 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