맥북, 리눅스에서 중복 라인 제거 하려면?

     

    텍스트 파일에서 중복 데이터를 없애려면?

    데이터를 확인하는 과정에서, 라인별 중복 데이터를 없애야 하는 경우가 있다.
    또는, 몇개의 중복 데이터가 있는지 확인하고 싶을 때가 있다.

    맥북 혹은 리눅스 사용자라면, 이럴 때 내장 명령어로도 쉽게 확인할 수 있다.


     



    sort 명령어 소개

    sort 명령어에 대한 설명은 아래와 같다.

    The sort utility sorts text and binary files by lines.  A line is a record separated from the subsequent
    record by a newline (default) or NUL '\0' character (-z option).  A record can contain any printable or
    unprintable characters.  Comparisons are based on one or more sort keys extracted from each line of input,
    and are performed lexicographically, according to the current locale's collating rules and the specified
    command-line options that can tune the actual sorting behavior.  By default, if keys are not given, sort
    uses entire lines for comparison.

     

    sort 주요 옵션

    • -u, --unique: 고유 값 추출
    • -r, --reverse: 역순 정렬

     

    uniq 명령어 소개

    uniq 명령어에 대한 설명은 아래와 같다.

    The uniq utility reads the specified input_file comparing adjacent lines, and writes a copy of each unique
    input line to the output_file.  If input_file is a single dash (`-') or absent, the standard input is read.
    If output_file is absent, standard output is used for output.  The second and succeeding copies of identical
    adjacent input lines are not written.  Repeated lines in the input will not be detected if they are not
    adjacent, so it may be necessary to sort the files first.

    여기서 핵심은 ajacent lines라는 점이다. 즉 인접라인에 의존성이 있다.
    라인별로 처리하면서 바로 이웃라인과 똑같은지 아닌지에 따라 중복여부를 판단한다.

     

    uniq 주요 옵션

    • -c: 반복 카운트 보여주기
    • -d: 중복 내용만 보여주기

     

    테스트를 위한 테스트 파일

    다음과 같은 과일 리스트(인기투표?)가 있다고 가정하자.

    • 파일이름: sample.txt
    • 파일내용은 아래와 같다.
    banana
    apple
    pineapple
    orange
    banana
    apple
    strawberry
    blueberry
    tomato
    grape
    watermelon
    apple
    kiwi

     

    확인해 보고자 하는 데이터 유형

    리눅스 혹은 맥북 내장 명령어를 통해 다음과 같은 데이터를 확인해 볼 것이다.

    1. 총 과일의 종류는?
    2. 인기있는 과일 top 3는?
    3. 인기있는 과일 순서는?
    4. 인기없는 과일 순서는?
    5. 얼마나 인기 있나? (획득 투표 수)


     



    정렬하기

    $ sort sample.txt
    
    apple
    apple
    apple
    banana
    banana
    blueberry
    grape
    kiwi
    orange
    pineapple
    strawberry
    tomato
    watermelon

    아래의 명령어도 위의 명령어와 같은 실행 결과를 보여준다.

    $ cat sample.txt | sort

     

    역순 정렬하기

    $ sort -r sample.txt
    
    watermelon
    tomato
    strawberry
    pineapple
    orange
    kiwi
    grape
    blueberry
    banana
    banana
    apple
    apple
    apple

    아래도 동일한 결과를 보장한다.

    $ cat sample.txt | sort -r

     

    중복 제거하기

    $ sort -u sample.txt
    
    apple
    banana
    blueberry
    grape
    kiwi
    orange
    pineapple
    strawberry
    tomato
    watermelon

    아래도 동일하다.

    $ cat sample.txt | sort -u

    uniq 명령어는 선 정렬을 한 후에 사용하자.

    $ sort sample.txt | uniq 
    
    apple
    banana
    blueberry
    grape
    kiwi
    orange
    pineapple
    strawberry
    tomato
    watermelon

    아래의 명령어도 위와 동일하다.

    $ cat sample.txt | sort | uniq

    정렬을 역순으로 해도 데이터의 순서만 바뀔 뿐, 고유 데이터는 여전히 얻을 수 있다.

    $ cat sample.txt | sort -r | uniq
    
    watermelon
    tomato
    strawberry
    pineapple
    orange
    kiwi
    grape
    blueberry
    banana
    apple

     

    중복 카운트하기

    $ sort sample.txt | uniq -c
    
       3 apple
       2 banana
       1 blueberry
       1 grape
       1 kiwi
       1 orange
       1 pineapple
       1 strawberry
       1 tomato
       1 watermelon


     



    중복인 내용만 확인하기

    $ sort sample.txt | uniq - d
    
    apple
    banana

     

    상위 3개 확인하기

    $ sort sample.txt | uniq -c | head -3
    
       3 apple
       2 banana
       1 blueberry

    댓글

    Designed by JB FACTORY