[Command-line] uniq command in Linux

2022. 2. 22. 00:09Linux/Command-line

반응형
  1. uniq
  2. 예제
    1. 예제 파일
    2. uniq 기본
    3. -i, ignore-case
    4. sort 명령어 적용
    5. -c, --count
    6. -d, --repeated
    7. -u, --unique
  3. 응용

1. uniq

uniq는 연속적으로 중복된 내용을 제거하여 출력하는 유틸리티 입니다.

uniq [OPTION]... [INPUT [OUTPUT]]

option

  • -i
    • --ignore-case
    • 대소문자 구분 x
  • -c
    • --count
    • 반복 횟수를 prefix에 포함하여 출력
  • -d
    • --repeated
    • 반복되어 나타난 line만 출력
  • -u
    • --unique
    • 반복되지 않은 line만 출력

2. 예제

2.1. 예제 파일

예제를 위한 간단한 파일들을 추가하겠습니다.

cat green.txt
apple
banana
melon
blue
red
red
Red
blue
red Blue
apple
Banana

green.txt 파일을 줄번호 설정하여 출력하면 아래와 같이 출력됩니다.

nl green.txt
    1  apple
    2  banana
    3  melon
    4  blue
    5  red
    6  red
    7  Red
    8  blue
    9  red Blue
   10  apple
   11  Banana

※ 참고 [Command-line] nl을 이용한 줄번호 설정


2.2. uniq 기본

별도의 옵션 설정없이 uniq를 설정할 경우, 반복되는 줄에 대한 부분을 제거하여 출력합니다.

uniq green.txt | nl
     1  apple
     2  banana
     3  melon
     4  blue
     5  red
     6  Red
     7  blue
     8  red Blue
     9  apple
    10  Banana

기존에 green.txt에는 5, 6 line에 동일한 내용인 red를 가지고 있었습니다.
따라서, uniq를 설정한 결과, 기존에 6 line에 있었던 red 한줄이 제거되어 출력되었습니다.

기본적으로 uniq 명령어는 대소문자를 구분하기 때문에 Red는 제거되지 않았습니다.

2.3. -i, ignore-case

-i 옵션은 ignore-case 옵션입니다.

uniq -i green.txt | nl
     1	apple
     2	banana
     3	melon
     4	blue
     5	red
     6	blue
     7	red Blue
     8	apple
     9	Banana

5 line 아래에 있던 Red 가 red와 동일하게 취급하여 제거되었습니다.


2.4. sort 명령어 적용

green.txt를 대소문자 구분하지 않고, 정렬하여 uniq 적용하면 어떤 결과가 나올까?

먼저, sort만 적용한 결과입니다.

sort -f green.txt
apple
apple
Banana
banana
blue
blue
melon
Red
red
red
red Blue

sort 명령어의 -f 옵션은 ignore-case 옵션입니다.

※ 더 자세히 알고 싶다면 [Command-line] nl을 이용한 줄번호 설정를 참고해주세요.


그 결과에 uniq -i를 적용하면 아래와 같이 나옵니다.

sort -f green.txt | uniq -i
apple
Banana
blue
melon
Red
red Blue

2.5. -c, --count

반복된 라인 횟수를 알고 싶다면 -c 옵션을 사용하면 됩니다.

2.4. 에 -c 옵션을 추가해보면 아래와 같이 반복된 수가 prefix에 포함되어 출력됩니다.

sort -f green.txt | uniq -ic
      2 apple
      2 Banana
      2 blue
      1 melon
      3 Red
      1 red Blue

2.6. -d, --repeated

반복되어 나타난 line만 출력합니다.
2.4. 에 -d 옵션을 추가한 결과입니다.

sort -f green.txt | uniq -id
apple
Banana
blue
Red

2.7. -u, --unique

반복되지 않은 line만 출력합니다.
2.4. 에 -u 옵션을 추가한 결과입니다.

sort -f green.txt | uniq -iu
melon
red Blue

3. 응용

현재 디렉토리에서 apple이라는 문자열이 존재하는 .txt 파일명을 출력해보자.

1) grep을 이용하여 파일 내에 apple 문자열이 존재하는 txt파일 출력

grep "apple" *.txt
02-1

2) awk 명령어로 파일명 필드값만 출력

: 필드구분자를 이용하여 line에서 파일명 필드값만 출력합니다.

grep "apple" *.txt | awk -F: '{print $1}'
02-2

2) 파일명에 uniq 적용

조회된 txt파일을 uniq 명령어를 중복된 결과 제거하기

grep "apple" *.txt | awk -F: '{print $1}' | uniq
02-3

++

  • How to use uniq command in CentOS 7
  • How to use uniq command in Linux
  • uniq command in Linux with examples
728x90
반응형