シェルスクリプトを使用して文字列からすべての重複単語を削除する

シェルスクリプトを使用して文字列からすべての重複単語を削除する

私はこのような文字列を持っています

"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

ただし、重複した値で出力が表示されます。良い

「赤、黒、青、赤、緑、赤、黒、青、赤、緑」ありがとう

答え1

楽しみのために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

答え2

trsortuniq

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 

並ぶ

答え3

$ echo "zebra ant spider spider ant zebra ant"  | awk -v RS="[ \n]+" '!n[$0]++' 
zebra
ant
spider

答え4

perl -lane '$,=$";print grep { ! $h{$_}++ } @F'

関連情報