我有一个像这样的字符串
"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'