쉘 스크립트를 사용하여 문자열에서 모든 중복 단어 제거

쉘 스크립트를 사용하여 문자열에서 모든 중복 단어 제거

나는 이런 문자열을 가지고있다

"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, sortuniq

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'

관련 정보