리눅스 중복 필터링

LinuxBeginner
지금 연습하기

소개

Linux 중복 필터링 랩에 오신 것을 환영합니다. 이 랩에서는 텍스트 파일에서 중복 데이터를 필터링하는 데 필수적인 도구인 Linux 의 uniq 명령어를 사용하는 방법을 배우게 됩니다. 이 명령어는 로그 파일, 데이터 처리 작업 및 텍스트 조작 작업 시 특히 유용합니다.

이 랩의 목표는 파일에서 중복된 줄을 효과적으로 식별하고 제거하는 방법을 가르치는 것입니다. uniq 명령어를 독립적으로 사용하는 방법과 sort와 같은 다른 명령어와 결합하여 더욱 강력한 필터링 기능을 달성하는 방법을 배우게 됩니다. 이러한 기술은 시스템 관리자, 데이터 분석가 및 Linux 환경에서 텍스트 데이터를 처리해야 하는 모든 사람에게 기본적으로 중요합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 92%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

uniq 명령어 이해하기

이 단계에서는 텍스트 파일에서 중복된 줄을 필터링하는 데 사용되는 uniq 명령어의 기본 사항을 배우게 됩니다. uniq 명령어는 로그, 구성 파일 및 중복을 식별하거나 제거해야 하는 기타 데이터를 다룰 때 특히 중요합니다.

작업할 샘플 텍스트 파일을 만들어 시작해 보겠습니다. ~/project 디렉토리에 duel_log.txt라는 파일을 만들 것입니다.

echo -e "sword\nsword\nshield\npotion\npotion\nshield" > ~/project/duel_log.txt

이 명령어는 다음과 같은 내용의 파일을 생성합니다.

sword
sword
shield
potion
potion
shield

이 파일에 중복된 줄이 있다는 것을 알 수 있습니다. "sword"가 두 번 나타나고, "potion"이 두 번 나타나며, "shield"가 두 번 나타납니다 (하지만 연속적으로는 아닙니다).

이제 uniq 명령어를 사용하여 인접한 중복된 줄을 필터링해 보겠습니다.

uniq ~/project/duel_log.txt

다음과 같은 출력을 볼 수 있습니다.

sword
shield
potion
shield

여기서 흥미로운 점을 주목하세요: uniq 명령어는 인접한 중복 항목이었기 때문에 두 번째 "sword"와 두 번째 "potion"을 제거했습니다. 그러나 "shield"는 중복 항목이 서로 인접하지 않았기 때문에 여전히 두 번 나타납니다.

이것은 이해해야 할 핵심 개념입니다: uniq 명령어는 서로 인접한 (연속적인 중복) 중복된 줄만 제거합니다. 동일한 내용이 파일의 다른 곳에 나타나지만 중복 항목과 인접하지 않은 경우 uniq는 이를 필터링하지 않습니다.

이 동작을 확인하기 위해 원래 파일을 다시 확인해 보겠습니다.

cat ~/project/duel_log.txt

이것을 uniq 명령어의 출력과 비교하면 인접한 중복 항목만 제거되었음을 명확하게 알 수 있습니다.

sortuniq 를 활용한 완벽한 중복 제거

이전 단계에서 uniq 명령어는 인접한 중복된 줄만 제거한다는 것을 배웠습니다. 그러나 많은 실제 시나리오에서는 파일 내 위치에 관계없이 모든 중복 항목을 제거해야 합니다. 이를 위해 sort 명령어를 uniq 명령어와 결합할 수 있습니다.

sort 명령어는 줄을 알파벳순 또는 숫자순으로 정렬하여 중복된 줄을 함께 묶습니다. 정렬 후 모든 중복된 줄이 인접하게 되어 uniq 명령어가 모든 중복 항목을 효과적으로 제거할 수 있습니다.

결과를 저장할 새 파일을 만들어 시작해 보겠습니다.

touch ~/project/sorted_duel_log.txt

이제 sort 명령어를 사용하여 원래 파일의 줄을 알파벳순으로 정렬해 보겠습니다.

sort ~/project/duel_log.txt

다음과 같은 출력을 볼 수 있습니다.

potion
potion
shield
shield
sword
sword

sort 명령어가 모든 중복된 줄을 함께 그룹화한 방식을 확인하세요. 이제 이 정렬된 출력을 uniq 명령어에 파이프하여 중복 항목을 제거해 보겠습니다.

sort ~/project/duel_log.txt | uniq

출력은 다음과 같아야 합니다.

potion
shield
sword

완벽합니다! 이제 모든 중복 항목이 제거된 목록이 있습니다. 이 출력을 sorted_duel_log.txt 파일에 저장해 보겠습니다.

sort ~/project/duel_log.txt | uniq > ~/project/sorted_duel_log.txt

새 파일의 내용을 확인해 보겠습니다.

cat ~/project/sorted_duel_log.txt

다음과 같은 내용을 볼 수 있습니다.

potion
shield
sword

sortuniq의 이러한 조합은 Linux 에서 데이터 처리를 위한 강력한 기술입니다. 이를 통해 파일에서 모든 중복 항목을 효율적으로 찾아 제거할 수 있으며, 이는 데이터 정리 및 분석 작업에 필수적입니다.

uniq 고급 옵션 및 실용적인 활용

uniq의 기본 사용법과 sort와 결합하는 방법을 이해했으므로 데이터 처리 작업에 더욱 강력하게 사용할 수 있는 uniq 명령어의 몇 가지 추가 옵션을 살펴보겠습니다.

-c 를 사용하여 발생 횟수 계산

-c 옵션은 각 줄의 발생 횟수를 계산합니다. 파일에 각 고유한 줄이 몇 번 나타나는지 알고 싶을 때 유용합니다.

sort ~/project/duel_log.txt | uniq -c

다음과 같은 출력을 볼 수 있습니다.

      2 potion
      2 shield
      2 sword

이는 각 항목이 원래 파일에 두 번 나타난다는 것을 보여줍니다.

-d 를 사용하여 중복된 줄만 찾기

중복된 줄 (두 번 이상 나타나는 줄) 만 찾고 싶다면 -d 옵션을 사용할 수 있습니다.

sort ~/project/duel_log.txt | uniq -d

출력:

potion
shield
sword

파일의 모든 항목에 중복 항목이 있으므로 출력에 모두 나열됩니다.

고유 항목만 포함하는 파일 만들기

uniq 명령어를 더 잘 시연하기 위해 내용이 더 다양한 새 파일을 만들어 보겠습니다.

echo -e "apple\napple\napple\nbanana\ncherry\ncherry\ngrape" > ~/project/fruits.txt

이 파일을 살펴보겠습니다.

cat ~/project/fruits.txt

출력:

apple
apple
apple
banana
cherry
cherry
grape

이제 -u 옵션을 사용하여 정확히 한 번 나타나는 항목을 찾아보겠습니다.

sort ~/project/fruits.txt | uniq -u

출력:

banana
grape

이는 "banana"와 "grape"가 파일에 한 번만 나타난다는 것을 보여줍니다.

실제 응용 프로그램: 로그 분석

실제 응용 프로그램을 시뮬레이션하기 위해 간단한 로그 파일을 만들어 보겠습니다.

echo -e "INFO: System started\nERROR: Connection failed\nINFO: User logged in\nWARNING: Low memory\nERROR: Connection failed\nINFO: System started" > ~/project/system.log

이제 이 로그 파일을 분석하여 어떤 유형의 메시지가 나타나고 몇 번 나타나는지 알아보겠습니다.

cat ~/project/system.log | sort | uniq -c

출력은 다음과 유사해야 합니다.

      2 ERROR: Connection failed
      2 INFO: System started
      1 INFO: User logged in
      1 WARNING: Low memory

이를 통해 로그 파일의 이벤트 유형과 빈도에 대한 간략한 개요를 얻을 수 있습니다.

cut 명령어를 사용하여 메시지 유형 (INFO, ERROR, WARNING) 만 추출할 수도 있습니다.

cat ~/project/system.log | cut -d: -f1 | sort | uniq -c

출력:

      2 ERROR
      3 INFO
      1 WARNING

이 분석은 6 개의 로그 항목 중 3 개가 INFO 메시지, 2 개가 ERROR 메시지, 1 개가 WARNING 메시지임을 보여줍니다.

이러한 예는 sort, uniq, cut과 같은 간단한 명령어를 결합하여 Linux 에서 강력한 데이터 처리 파이프라인을 만드는 방법을 보여줍니다.

요약

이 랩에서는 Linux 에서 uniq 명령어를 사용하여 텍스트 파일에서 중복된 줄을 필터링하는 방법을 배웠습니다. 다음은 개발한 주요 개념과 기술입니다.

  1. 기본 uniq 사용법: uniq 명령어가 파일에서 인접한 중복된 줄을 제거한다는 것을 배웠습니다. 이는 기본적인 중복 필터링에 유용하지만 제한 사항이 있습니다.

  2. sortuniq 결합: 파일 내 위치에 관계없이 모든 중복 항목을 제거하려면 먼저 sort 명령어로 파일을 정렬한 다음 uniq로 필터링해야 한다는 것을 알게 되었습니다.

  3. 고급 uniq 옵션:

    • 각 줄의 발생 횟수를 계산하는 -c 옵션
    • 중복된 줄만 표시하는 -d 옵션
    • 고유한 줄만 표시하는 -u 옵션 (정확히 한 번 나타나는 줄)
  4. 실용적인 응용: 이러한 명령어가 다음과 같은 실제 시나리오에 어떻게 적용될 수 있는지 확인했습니다.

    • 로그 파일 분석
    • 고유 항목 찾기 및 계산
    • 데이터 정리 및 준비

이러한 기술은 Linux 환경에서 텍스트 데이터를 처리하는 데 기본이며, 더 고급 데이터 처리 작업의 기반이 됩니다. sortuniq와 같은 간단한 명령어를 결합하면 텍스트 데이터를 효율적으로 관리하고 분석하는 데 도움이 되는 강력한 데이터 처리 파이프라인을 만들 수 있습니다.