리눅스 텍스트 처리

LinuxBeginner
지금 연습하기

소개

이 랩에서는 강력한 명령줄 유틸리티인 awk에 초점을 맞춰 Linux 텍스트 처리에 대해 배우게 됩니다. 텍스트 처리는 Linux 에서 사용자가 텍스트 데이터를 조작, 분석하고 의미 있는 정보를 추출할 수 있게 해주는 기본적인 기술입니다.

awk 명령은 특히 데이터 조작 작업에 유용합니다. 텍스트 파일을 줄 단위로 처리하고, 각 줄을 필드로 분할하며, 해당 필드에 대한 작업을 수행할 수 있습니다. 이는 로그, CSV 파일, 표 형식 데이터와 같은 구조화된 데이터를 처리하는 데 이상적입니다.

이 랩에서는 awk를 사용하여 간단한 열 추출부터 조건부 데이터 분석까지 다양한 데이터 처리 작업을 수행하는 방법을 배우게 됩니다. 이러한 기술은 시스템 관리자, 데이터 분석가 및 Linux 환경에서 텍스트 데이터를 사용하는 모든 사람에게 필수적입니다.

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

AWK 이해 및 샘플 데이터 생성

이 단계에서는 awk의 기본 사항을 배우고 랩 전체에서 사용할 샘플 데이터 파일을 생성합니다.

먼저, 프로젝트 디렉토리로 이동합니다.

cd ~/project

이제 탭으로 구분된 열이 있는 표 형식 데이터를 포함하는 probe_data.txt라는 샘플 데이터 파일을 생성합니다.

echo -e "Timestamp\tReading\n2023-01-25T08:30:00Z\t-173.5\n2023-01-25T08:45:00Z\t-173.7\n2023-01-25T09:00:00Z\t-173.4" > probe_data.txt

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

cat probe_data.txt

다음과 유사한 출력을 볼 수 있습니다.

Timestamp Reading
2023-01-25T08:30:00Z -173.5
2023-01-25T08:45:00Z -173.7
2023-01-25T09:00:00Z -173.4

이 데이터는 서로 다른 시간의 온도 판독값을 나타냅니다.

awk 명령의 기본 구문은 다음과 같습니다.

awk 'pattern {action}' filename
  • pattern: 처리할 줄을 결정하는 선택적 조건
  • action: 일치하는 줄에서 실행할 명령
  • filename: 처리할 파일

전체 파일을 인쇄하는 간단한 awk 명령을 실행해 보겠습니다.

awk '{print}' probe_data.txt

이 명령은 패턴이 지정되지 않았으므로 파일의 각 줄을 인쇄합니다. 따라서 awk는 모든 줄을 처리합니다.

데이터 파일에서 판독값 열 (두 번째 열) 만 추출해 보겠습니다.

awk -F "\t" '{print $2}' probe_data.txt

이 명령에서:

  • -F "\t"는 필드 구분 기호를 탭 문자로 설정합니다.
  • {print $2}awk에게 각 줄의 두 번째 필드를 인쇄하도록 지시합니다.

다음과 유사한 출력을 볼 수 있습니다.

Reading
-173.5
-173.7
-173.4

AWK 를 이용한 데이터 필터링

이 단계에서는 awk를 사용하여 조건을 기반으로 데이터를 필터링하는 방법을 배우게 됩니다. 이는 특정 기준을 충족하는 데이터만 추출할 수 있게 해주는 강력한 기능입니다.

awk를 사용하면 처리할 줄을 결정하기 위해 패턴 또는 조건을 지정할 수 있습니다. 온도 데이터를 사용하여 이를 실습해 보겠습니다.

온도가 특정 임계값 미만인 모든 판독값을 찾고 싶다고 가정해 보겠습니다. 이는 특이한 조건이나 잠재적인 장비 문제를 나타낼 수 있습니다.

온도가 -173.6 도 미만인 모든 레코드를 찾아보겠습니다.

awk -F "\t" '$2 < -173.6 {print $0}' probe_data.txt

이 명령에서:

  • $2 < -173.6은 두 번째 필드 (판독값) 가 -173.6 미만인지 확인하는 조건입니다.
  • {print $0}은 조건이 참일 때 awk에게 전체 줄을 인쇄하도록 지시합니다.
  • $0은 전체 줄을 나타냅니다.

다음과 유사한 출력을 볼 수 있습니다.

2023-01-25T08:45:00Z -173.7

이는 하나의 판독값만 임계값 미만임을 보여줍니다.

조건에서 논리 연산자를 사용할 수도 있습니다. 예를 들어, -173.6 과 -173.3 사이의 모든 판독값을 찾아보겠습니다.

awk -F "\t" '$2 <= -173.4 && $2 >= -173.6 {print $0}' probe_data.txt

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

2023-01-25T09:00:00Z -173.4

필터링된 데이터에서 특정 열을 추출할 수도 있습니다. 예를 들어, -173.6 미만의 판독값의 타임스탬프만 보려면 다음을 수행합니다.

awk -F "\t" '$2 < -173.6 {print $1}' probe_data.txt

이렇게 하면 다음이 출력됩니다.

2023-01-25T08:45:00Z

AWK 고급 연산

이 마지막 단계에서는 awk를 사용하여 계산을 수행하고 서식 있는 보고서를 만드는 방법을 배우게 됩니다. 이러한 고급 작업은 단순한 텍스트 필터링 도구 이상의 awk의 강력함을 보여줍니다.

먼저, 판독값에서 평균 온도를 계산해 보겠습니다.

awk -F "\t" 'NR>1 {sum+=$2; count++} END {print "Average temperature: " sum/count}' probe_data.txt

이 명령에서:

  • NR>1은 헤더 행 (첫 번째 행) 을 건너뜁니다.
  • {sum+=$2; count++}는 각 온도를 실행 중인 합계에 더하고 카운터를 증가시킵니다.
  • END {print "Average temperature: " sum/count}는 모든 줄을 처리한 후 평균을 계산하고 인쇄합니다.

다음과 유사한 출력을 볼 수 있습니다.

Average temperature: -173.533

이제 원본 데이터와 일부 분석을 모두 포함하는 보다 자세한 보고서를 만들어 보겠습니다.

awk -F "\t" '
BEGIN {print "Temperature Reading Analysis\n---------------------------"}
NR==1 {print "Time\t\t\tReading\tStatus"}
NR>1 {
    if ($2 < -173.6) status="WARNING";
    else if ($2 > -173.5) status="NORMAL";
    else status="CAUTION";
    print $1 "\t" $2 "\t" status
}
END {print "---------------------------\nAnalysis complete."}
' probe_data.txt

이 복잡한 명령은 다음을 수행합니다.

  1. BEGIN 블록에서 헤더 메시지를 인쇄합니다.
  2. 첫 번째 행 (NR==1) 을 처리할 때 열 헤더를 인쇄합니다.
  3. 각 데이터 행 (NR>1) 에 대해:
    • 온도를 평가하고 상태를 할당합니다.
    • 타임스탬프, 판독값 및 상태를 인쇄합니다.
  4. END 블록에서 푸터 메시지를 인쇄합니다.

다음과 유사한 출력을 볼 수 있습니다.

Temperature Reading Analysis
---------------------------
Time   Reading Status
2023-01-25T08:30:00Z -173.5 CAUTION
2023-01-25T08:45:00Z -173.7 WARNING
2023-01-25T09:00:00Z -173.4 NORMAL
---------------------------
Analysis complete.

awk를 사용하여 발생 횟수를 계산하는 방법을 보여주는 예제를 하나 더 만들어 보겠습니다. 각 상태 범주에 속하는 판독값이 몇 개인지 계산합니다.

awk -F "\t" '
NR>1 {
    if ($2 < -173.6) status="WARNING";
    else if ($2 > -173.5) status="NORMAL";
    else status="CAUTION";
    count[status]++
}
END {
    print "Status counts:";
    for (status in count) print status ": " count[status]
}
' probe_data.txt

이 명령은 연관 배열 (count) 을 사용하여 각 상태 범주에 속하는 판독값의 수를 추적한 다음 합계를 인쇄합니다.

다음과 유사한 출력을 볼 수 있습니다.

Status counts:
WARNING: 1
NORMAL: 1
CAUTION: 1

이러한 예제는 데이터 분석 작업에 awk가 얼마나 강력한지 보여줍니다. 유사한 기술을 사용하여 로그 파일을 처리하고, 시스템 데이터를 분석하거나, Linux 에서 구조화된 텍스트 데이터를 사용할 수 있습니다.

요약

이 랩에서는 강력한 awk 명령줄 유틸리티를 사용하여 Linux 텍스트 처리에 필요한 핵심 기능을 배웠습니다. 구조화된 데이터 파일을 생성하고 보는 기본 사항부터 시작하여 점점 더 발전된 기술을 익혔습니다.

이 랩에서 습득한 주요 기술은 다음과 같습니다.

  1. awk의 기본 구문 및 기능 이해
  2. 표 형식 데이터에서 특정 열 추출
  3. 숫자 조건을 기반으로 데이터 필터링
  4. 계산 수행 및 서식 있는 보고서 생성
  5. 실용적인 데이터 분석 작업에 awk 사용

이러한 텍스트 처리 기술은 시스템 관리자가 로그 파일을 분석하는 것부터 데이터 분석가가 대규모 데이터 세트에서 통찰력을 추출하는 것까지, Linux 환경에서 데이터를 사용하는 모든 사람에게 매우 중요합니다. 특수 도구 없이 명령줄에서 직접 텍스트 데이터를 빠르게 조작하고 분석하는 기능은 Linux 환경에서 생산성을 크게 향상시킬 수 있는 강력한 기능입니다.

Linux 여정을 계속 진행하면서 awk를 보완하고 더욱 강력한 데이터 조작 워크플로를 위해 결합할 수 있는 sed, grep, cut과 같은 다른 텍스트 처리 도구를 살펴보는 것을 고려해 보십시오.