이 코드 블록은 Total
행을 찾아서 Fatals
, Errors
, Warnings
값을 추출하는 역할을 합니다.
자세히 분석해볼게요.
foreach line ("`head -n $num_lines $logfile`")
@ line_count++
if ("$line" =~ "*Management Summary*") then
set summary_flag = 1
continue
endif
if ($summary_flag == 1) then
# "Total" 행에서 값 추출
if ("$line" =~ "*Total*") then
set tokens = (`echo $line | tr -s ' ' | cut -d' ' -f2-`)
set fatal_count = $tokens[1]
set error_count = $tokens[2]
set warning_count = $tokens[3]
break
endif
endif
# 최대 n줄까지만 처리
if ($line_count >= $num_lines) then
break
endif
end
코드 상세 분석
if ("$line" =~ "*Total*") then
- 현재
line
이"Total"
을 포함하고 있는지를 확인하는 조건문입니다. Total
행을 찾으면 아래 코드를 실행합니다.
set tokens = (`echo $line | tr -s ' ' | cut -d' ' -f2-`)
이 부분은 "Total"
행에서 숫자 값을 추출하는 핵심 코드입니다. 하나씩 분석해보겠습니다.
1. echo $line
현재
line
값을 출력합니다.예를 들어,
Total
행이 다음과 같다면:Total 0 0 1 3 5287 7923
이
line
을echo
로 출력하면:Total 0 0 1 3 5287 7923
2. tr -s ' '
tr -s ' '
는 연속된 공백을 하나의 공백으로 줄이는 역할을 합니다.원본
line
에는 공백이 여러 개 있지만,tr -s ' '
를 적용하면:Total 0 0 1 3 5287 7923
처럼 공백이 하나로 정리됩니다.
3. cut -d' ' -f2-
cut
명령어를 사용하여"Total"
단어를 제외한 나머지 숫자들을 추출합니다.-d' '
는 공백을 기준으로 필드를 구분한다는 의미입니다.-f2-
는 두 번째 필드부터 끝까지 선택한다는 뜻입니다.결과적으로:
0 0 1 3 5287 7923
이 값이
tokens
배열에 저장됩니다.
set fatal_count = $tokens[1]
set error_count = $tokens[2]
set warning_count = $tokens[3]
tokens
배열에서Fatal
,Error
,Warning
값을 각각 변수에 저장합니다.tokens[1]
→Fatals
값 (0
)tokens[2]
→Errors
값 (0
)tokens[3]
→Warnings
값 (1
)
break
Total
행을 찾고 값을 추출했으므로, 더 이상 반복할 필요가 없어서foreach
루프를 종료합니다.
결과 예시
입력 로그
Total 0 0 1 3 5287 7923
출력된 변수 값
fatal_count = 0
error_count = 0
warning_count = 1
이 값들을 바탕으로 결과를 판별하게 됩니다.
정리
"Total"
행을 찾는다.tr -s ' '
로 공백을 정리한 후cut -d' ' -f2-
로 숫자만 추출.- 추출한 숫자를 배열
tokens
에 저장. tokens
에서Fatals
,Errors
,Warnings
값을 가져와 변수에 저장.- 값을 찾았으면
break
로 루프 종료.
이해가 됐나요? 추가 질문 있으면 알려주세요! 😊
'IT > 리눅스' 카테고리의 다른 글
sed 로 # 뒤 문자열 제거하기, 즉 주석 같은 구문 제거 (0) | 2025.02.07 |
---|---|
쉘스크립트 - echo 로 멀티 라인 문자열 저장하는 방법 EOF (0) | 2025.02.06 |
grep 으로 문자열 검색하기 (0) | 2025.01.22 |
split - 용량 큰 로그 파일, 텍스트 파일 나누기 (0) | 2025.01.22 |
tcl - regsub 문자열 치환 함수 (0) | 2025.01.13 |