나는 이런 문자열을 가지고있다
"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'