Shell-Script
使用 shell 腳本從字元串中刪除所有重複的單詞
我有一個字元串
"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
得到一條線