Shell-Script

使用 shell 腳本從字元串中刪除所有重複的單詞

  • January 9, 2022

我有一個字元串

"aaa,aaa,aaa,bbb,bbb,ccc,bbb,ccc"

我想從字元串中刪除重複的單詞然後輸出會像

"aaa,bbb,ccc"

我試過這個程式碼

$ echo "zebra ant spider spider ant zebra ant" | xargs -n1 | sort -u | xargs

它在相同的值下工作正常,但是當我給我的變數值時,它也會顯示所有重複的單詞。

如何刪除重複值。

更新

我的問題是如果使用者相同,則將所有相應的值添加到單個字元串中。我有這樣的數據->

  user name    | colour
   AAA         | red
   AAA         | black
   BBB         | red
   BBB         | blue
   AAA         | blue
   AAA         | red
   CCC         | red
   CCC         | red
   AAA         | green
   AAA         | red
   AAA         | black
   BBB         | red
   BBB         | blue
   AAA         | blue
   AAA         | red
   CCC         | red
   CCC         | red
   AAA         | green

在編碼中,我獲取所有不同的使用者,然後成功連接顏色字元串。為此,我正在使用程式碼-

while read the records 

   if [ "$c" == "" ]; then  #$c I defined global
       c="$colour1"
   else
       c="$c,$colour1" 
   fi

當我列印這個 $c 變數時,我得到了輸出(對於使用者 AAA)

"red,black,blue,red,green,red,black,blue,red,green,"

我想刪除重複的顏色。然後所需的輸出應該是

"red,black,blue,green"

對於這個所需的輸出,我使用了上面的程式碼

echo "zebra ant spider spider ant zebra ant" | xargs -n1 | sort -u | xargs

但它正在顯示具有重複值的輸出。像

“紅,黑,藍,紅,綠,紅,黑,藍,紅,綠,”謝謝

再來一個 awk,只是為了好玩:

$ a="aaa bbb aaa bbb ccc aaa ddd bbb ccc"
$ echo "$a" | awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}'
aaa bbb ccc ddd 

順便說一句,即使您的解決方案也適用於變數:

$ b="zebra ant spider spider ant zebra ant" 
$ echo "$b" | xargs -n1 | sort -u | xargs
ant spider zebra

和_ tr_sort``uniq

echo "zebra ant spider spider ant zebra ant" | tr ' ' '\n' | sort -u

或者

echo "zebra ant spider spider ant zebra ant" | tr ' ' '\n' | sort -u | xargs 

得到一條線

引用自:https://unix.stackexchange.com/questions/353321