私はこのような文字列を持っています
"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
と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
並ぶ
答え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'