리눅스 텍스트 처리: AWK를 활용한 명령어 출력 파싱
- 최초 작성일: 2023년 8월 23일(수)
목차
명령어 구조 분석
기본 명령어
sudo /usr/local/bin/app-version -v | gawk 'NR == 1 {print $2}'
이 명령어는 다음과 같은 구성 요소로 이루어진다:
- 권한 상승 (sudo)
- 프로그램 실행 (/usr/local/bin/app-version -v)
- 출력 파싱 (gawk를 통한 텍스트 처리)
각 구성 요소 설명
1. sudo 명령어
- 용도: 관리자 권한으로 명령어 실행
- 특징: 보안 정책에 따른 권한 상승
- 동작 방식: 사용자 인증 후 권한 상승
2. 프로그램 경로와 옵션
/usr/local/bin/app-version -v
- 경로: 시스템 전역 실행 파일이 위치한 표준 디렉토리
- 옵션: -v (버전 정보 출력)
- 예상 출력: “Version: 1.2.3”
3. 파이프와 AWK 처리
| gawk 'NR == 1 {print $2}'
구성 요소 분석:
|
: 파이프 연산자gawk
: GNU AWK 텍스트 처리 도구NR == 1
: 첫 번째 라인 선택print $2
: 두 번째 필드 출력
실제 사용 예제
1. 기본 사용법
# 버전 정보 추출
sudo /usr/local/bin/app-version -v | gawk 'NR == 1 {print $2}'
# 결과 예시
1.2.3
2. 변수에 저장
VERSION=$(sudo /usr/local/bin/app-version -v | gawk 'NR == 1 {print $2}')
echo "현재 버전: $VERSION"
고급 활용 방법
1. 조건부 필드 추출
# 특정 조건에 맞는 필드만 추출
gawk '$1 == "Version:" {print $2}'
2. 다중 필드 처리
# 여러 필드 동시 처리
gawk '{print $2, $3}'
3. 에러 처리 추가
#!/bin/bash
if ! version=$(sudo /usr/local/bin/app-version -v | gawk 'NR == 1 {print $2}'); then
echo "버전 정보 추출 실패"
exit 1
fi
echo "추출된 버전: $version"
결론
AWK를 활용한 텍스트 처리는 리눅스 시스템에서 명령어 출력을 파싱하고 필요한 정보를 추출하는데 매우 효과적인 방법이다. 특히 버전 정보, 로그 파일, 시스템 상태 정보 등을 처리할 때 유용하게 활용할 수 있다.