Linux 데이터 파이핑

LinuxBeginner
지금 연습하기

소개

Linux 데이터 파이핑은 한 명령의 출력을 다른 명령의 입력으로 전달할 수 있게 해주는 강력한 기술입니다. 이 기본적인 개념을 통해 복잡한 명령 체인을 생성하여 데이터를 효율적으로 처리하고 변환할 수 있습니다. 이 랩에서는 파이프 연산자 (|) 를 사용하여 여러 명령을 결합하고 데이터 처리 워크플로우를 만드는 방법을 배우게 됩니다. 또한 명령 파이프라인에서 자주 사용되는 grep, sort, tr, uniq와 같은 필수 텍스트 처리 유틸리티도 살펴볼 것입니다.

이 랩을 마치면 Linux 명령줄 도구와 파이프라인 개념을 사용하여 데이터를 필터링, 변환 및 구성하는 방법을 이해하게 될 것입니다. 이러한 기술은 Linux 환경에서 텍스트 처리, 로그 분석 및 데이터 조작 작업에 필수적입니다.

텍스트 필터링을 위한 grep 명령 이해

grep 명령어는 Linux 에서 파일 또는 입력 스트림에서 패턴을 검색하는 강력한 텍스트 필터링 도구입니다. 이 단계에서는 grep을 사용하여 파일에서 특정 텍스트 패턴을 찾는 방법을 배우게 됩니다.

grep을 사용하여 data.txt 파일을 필터링하고 "apple" 문자열이 포함된 줄을 찾아보겠습니다.

cd ~/project
grep "apple" data.txt

이 명령을 실행하면 다음과 같은 출력이 표시됩니다.

apple
pineapple

grep 명령어는 "apple" 문자열을 포함하는 두 줄을 찾았습니다: "apple"만 있는 줄과 "pineapple"이 있는 줄입니다.

이제 grep을 사용하여 systems.txt 파일에서 "system" 단어가 포함된 모든 줄을 찾아보겠습니다.

grep "system" systems.txt

출력은 다음과 같이 표시됩니다.

file system
system update
system security

grep 명령어는 기본적으로 대소문자를 구분합니다. 대소문자를 구분하지 않는 검색을 수행하려면 -i 옵션을 사용할 수 있습니다.

grep -i "SYSTEM" systems.txt

이렇게 하면 파일에 소문자 "system"이 포함되어 있더라도 이전과 동일한 출력이 생성됩니다.

이제 grep을 사용하여 텍스트를 필터링하는 방법을 이해했으므로 파이프를 사용하여 명령을 결합하는 방법을 배우는 다음 단계로 진행할 수 있습니다.

파이프 연산자를 사용하여 명령 연결하기

이 단계에서는 파이프 연산자 (|) 를 사용하여 여러 명령을 함께 연결하는 방법을 배우게 됩니다. 파이프는 한 명령의 출력을 다른 명령의 입력으로 전달하여 강력한 명령 체인을 만들 수 있게 해줍니다.

파이프 연산자는 수직 막대 문자 (|) 로 표시됩니다. 간단한 예제를 통해 작동 방식을 살펴보겠습니다.

cd ~/project
ls -l | grep "txt"

이 예제에서 ls -l 명령은 현재 디렉토리의 파일을 나열하고, 해당 출력은 grep "txt" 명령으로 파이프되어 "txt"를 포함하는 줄만 필터링하여 표시합니다. 결과는 현재 디렉토리의 텍스트 파일 목록입니다.

파이프 연산자를 사용하여 grep을 다른 명령과 결합해 보겠습니다. 먼저 foods.txt 파일에서 "apple"을 포함하는 모든 줄을 찾아보겠습니다.

cat foods.txt | grep "apple"

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

apple juice
apple pie

cat 명령은 파일을 읽고 해당 내용을 파이프를 통해 grep으로 보냅니다. 그런 다음 grep 명령은 내용을 필터링하고 "apple"을 포함하는 줄만 표시합니다.

이제 더 많은 명령을 결합하여 데이터를 변환해 보겠습니다. tr 명령은 문자를 변환하거나 삭제하는 데 사용됩니다. 이를 사용하여 소문자를 대문자로 변환할 수 있습니다.

cat foods.txt | grep "apple" | tr '[:lower:]' '[:upper:]'

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

APPLE JUICE
APPLE PIE

이 명령 파이프라인에서:

  1. cat foods.txt는 foods.txt 파일의 내용을 읽습니다.
  2. 파이프 (|) 는 이 내용을 grep "apple"로 보냅니다.
  3. grep "apple"은 "apple"을 포함하는 줄만 필터링하고 유지합니다.
  4. 파이프 (|) 는 이러한 필터링된 줄을 tr '[:lower:]' '[:upper:]'로 보냅니다.
  5. tr '[:lower:]' '[:upper:]'는 모든 소문자를 대문자로 변환합니다.

이것은 파이프를 사용하여 여러 명령을 함께 연결하여 데이터 처리 워크플로우를 만드는 방법을 보여줍니다. 체인의 각 명령은 데이터에 대한 특정 작업을 수행하며, 최종 결과는 이러한 모든 작업의 조합입니다.

numbers.txt 파일로 예제를 하나 더 시도해 보겠습니다. 이 숫자들을 오름차순으로 정렬해 보겠습니다.

cat numbers.txt | sort -n

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

1
3
5
7
8
9
10

-n 옵션이 있는 sort 명령은 숫자를 숫자적으로 정렬합니다. 파이프가 없으면 정렬된 출력을 새 파일에 쓰고 해당 파일을 봐야 하지만, 파이프를 사용하면 결과를 즉시 확인할 수 있습니다.

고급 파이프라인: sort, uniq 및 기타 명령 결합

이 단계에서는 sort, uniq, wc 등과 같은 여러 명령을 결합하여 데이터를 처리하고 분석하는 더 복잡한 파이프라인을 만드는 방법을 배우게 됩니다.

sort 명령은 텍스트 파일 또는 입력 스트림의 줄을 정렬하는 데 사용됩니다. uniq 명령은 파일 또는 입력 스트림에서 반복되는 줄을 필터링하지만 정렬된 입력에서만 제대로 작동합니다. 이러한 명령을 파이프와 결합하면 데이터를 효율적으로 처리하고 구성할 수 있습니다.

fruits_with_duplicates.txt 파일에서 알파벳순으로 정렬된 고유한 과일 이름을 표시하려면 다음을 사용할 수 있습니다.

cd ~/project
cat fruits_with_duplicates.txt | sort | uniq

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

apple
banana
kiwi
orange

이 파이프라인에서:

  1. cat fruits_with_duplicates.txt는 파일 내용을 읽습니다.
  2. sort는 줄을 알파벳순으로 정렬합니다.
  3. uniq는 중복된 줄을 제거합니다.

각 과일이 목록에 몇 번 나타나는지 계산하려면 uniq와 함께 -c 옵션을 사용할 수 있습니다.

cat fruits_with_duplicates.txt | sort | uniq -c

출력은 각 과일의 개수를 표시합니다.

      3 apple
      2 banana
      1 kiwi
      1 orange

logs.txt 파일에서 오류가 몇 번 발생했는지 알아보려면 다음을 사용할 수 있습니다.

cat logs.txt | grep "ERROR" | wc -l

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

3

이 파이프라인에서:

  1. cat logs.txt는 로그 파일을 읽습니다.
  2. grep "ERROR"는 오류 메시지만 필터링합니다.
  3. wc -l은 줄 수 (즉, 오류 메시지 수) 를 계산합니다.

employees.txt 파일로 더 복잡한 파이프라인을 만들어 보겠습니다. 부서를 찾고 각 부서에 몇 명의 직원이 있는지 계산하려면 다음을 수행합니다.

cat employees.txt | cut -d',' -f2 | sort | uniq -c

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

      2 HR
      2 IT
      2 Sales

이 파이프라인에서:

  1. cat employees.txt는 직원 데이터를 읽습니다.
  2. cut -d',' -f2는 쉼표를 구분 기호로 사용하여 두 번째 필드 (부서) 를 추출합니다.
  3. sort는 부서를 알파벳순으로 정렬합니다.
  4. uniq -c는 각 부서의 발생 횟수를 계산합니다.

이러한 예제는 파이프를 사용하여 여러 명령을 결합하여 강력한 데이터 처리 워크플로우를 만드는 방법을 보여줍니다. Linux 파이프라인 개념을 사용하면 복잡한 데이터 처리 작업을 더 간단한 단계로 나눌 수 있으므로 명령줄 작업이 더 효율적이고 유연해집니다.

리눅스 파이프라인의 실제 활용 사례

이 마지막 단계에서는 로그 파일 분석, 데이터 파일 처리 및 일반적인 시스템 관리 작업을 통해 Linux 파이프라인의 실제 활용 사례를 살펴보겠습니다.

로그 파일 분석

시스템 관리자는 종종 로그 파일에서 유용한 정보를 추출해야 합니다. 파이프라인을 사용하여 server_log.txt 파일을 분석해 보겠습니다.

  1. 각 로그 레벨 (INFO, WARNING, ERROR) 의 발생 횟수 계산:
cd ~/project
cat server_log.txt | grep -o "INFO\|WARNING\|ERROR" | sort | uniq -c

출력:

      4 INFO
      3 ERROR
      2 WARNING
  1. 모든 타임스탬프와 로그 레벨 추출:
cat server_log.txt | grep -o "\[[0-9-]* [0-9:]*\] [A-Z]*" | head -5

출력:

[2023-05-10 08:45:22] INFO
[2023-05-10 09:12:35] ERROR
[2023-05-10 09:14:01] INFO
[2023-05-10 09:14:10] INFO
[2023-05-10 09:30:45] WARNING

CSV 데이터 처리

파이프라인을 사용하여 sales.csv 파일을 분석해 보겠습니다.

  1. 판매된 고유 제품 추출 및 개수 계산:
cat sales.csv | tail -n +2 | cut -d',' -f2 | sort | uniq -c

tail -n +2 명령은 CSV 파일의 헤더 행을 건너뜁니다.

출력:

      2 Keyboard
      2 Laptop
      2 Monitor
      2 Mouse
      1 Printer
  1. 판매된 총 유닛 수 계산:
cat sales.csv | tail -n +2 | cut -d',' -f3 | paste -sd+ | bc

출력:

113

이 파이프라인은 세 번째 열 (Units) 을 추출하고, 모든 값을 "+" 기호로 결합한 다음 bc 계산기를 사용하여 합계를 계산합니다.

시스템 모니터링 작업

Linux 파이프라인은 시스템 모니터링 및 관리 작업에도 유용합니다.

  1. 메모리를 가장 많이 사용하는 상위 5 개 프로세스 나열:
ps aux | sort -k 4 -r | head -6

이 명령은 4 번째 열 (메모리 사용량) 을 기준으로 역순으로 정렬된 프로세스를 나열하고 상위 6 개 줄 (헤더 포함) 을 표시합니다.

  1. 10MB 보다 큰 모든 파일을 찾아 크기별로 정렬:
cd ..
find . -type f -size +10M -exec ls -lh {} \; | sort -k 5 -h

이 명령은 크기별로 정렬된 큰 테스트 파일을 표시합니다. 출력은 다음과 유사해야 합니다.

-rw-r--r-- 1 labex labex 12M May 10 12:00 ./large_file3.dat
-rw-r--r-- 1 labex labex 15M May 10 12:00 ./large_file2.dat
-rw-r--r-- 1 labex labex 20M May 10 12:00 ./large_file1.dat

이 예제는 파일 크기별로 파일을 찾고 정렬하는 방법을 보여줍니다. 파일은 Linux 에서 파일 크기 필터링이 작동하는 방식을 보여주기 위해 설정 중에 특별히 생성되었습니다.

이러한 예제는 Linux 파이프라인을 사용하여 실제 문제를 효율적으로 해결하는 방법을 보여줍니다. 간단한 명령을 결합하여 복잡한 스크립트나 프로그램을 작성하지 않고도 강력한 데이터 처리 워크플로우를 만들 수 있습니다.

요약

이 랩에서는 명령 체이닝 (command chaining) 및 데이터 처리를 위한 강력한 기술인 Linux 데이터 파이핑 (data piping) 에 대해 배웠습니다. 이 랩에서 다룬 주요 개념은 다음과 같습니다.

  1. grep 을 사용한 기본 텍스트 필터링: grep 명령을 사용하여 텍스트 파일에서 특정 패턴을 검색하고 해당 패턴을 기반으로 데이터를 필터링하는 방법을 배웠습니다.

  2. 파이프를 사용한 명령 체이닝: 파이프 연산자 (|) 를 사용하여 여러 명령을 연결하고, 한 명령의 출력을 다른 명령의 입력으로 전달하는 방법을 살펴보았습니다.

  3. 텍스트 처리 명령: 다음을 포함한 다양한 텍스트 처리 유틸리티를 사용했습니다.

    • 텍스트 필터링을 위한 grep
    • 문자 변환을 위한 tr
    • 줄 정렬을 위한 sort
    • 중복 제거를 위한 uniq
    • 구조화된 데이터에서 특정 필드 추출을 위한 cut
    • 줄, 단어 또는 문자 수 세기를 위한 wc
  4. 실제 활용 사례: 이러한 파이프라인 기술을 로그 분석, CSV 데이터 처리 및 시스템 모니터링 작업과 같은 실제 문제 해결에 적용했습니다.

이러한 Linux 파이프라인 기술은 Linux 환경에서 작업하는 시스템 관리자, 데이터 분석가 및 개발자에게 필수적입니다. 이를 통해 완전한 프로그램을 작성하지 않고도 명령줄에서 직접 복잡한 데이터 조작 작업을 수행할 수 있습니다. 파이프를 통해 간단한 명령을 결합하여 효율적이고 유연한 강력한 데이터 처리 워크플로우를 만들 수 있습니다.

Linux 여정을 계속 진행하면서 명령 파이프라인 기술을 마스터하면 명령줄 환경에서 생산성과 문제 해결 능력이 크게 향상될 것입니다.