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
이 복잡한 명령은 다음을 수행합니다.
BEGIN 블록에서 헤더 메시지를 인쇄합니다.
- 첫 번째 행 (
NR==1) 을 처리할 때 열 헤더를 인쇄합니다.
- 각 데이터 행 (
NR>1) 에 대해:
- 온도를 평가하고 상태를 할당합니다.
- 타임스탬프, 판독값 및 상태를 인쇄합니다.
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 에서 구조화된 텍스트 데이터를 사용할 수 있습니다.