포스트

리눅스 텍스트 처리: AWK를 활용한 명령어 출력 파싱

명령어 출력에서 특정 필드를 추출하는 스크립트 작성 가이드

리눅스 텍스트 처리: AWK를 활용한 명령어 출력 파싱


명령어 구조 분석

기본 명령어

1
sudo /usr/local/bin/app-version -v | gawk 'NR == 1 {print $2}'

이 명령어는 sudo로 권한을 올려 프로그램을 실행하고, 그 출력을 gawk로 파싱해 원하는 필드만 뽑아내는 구조다.


각 구성 요소 설명

sudo

대상 프로그램이 root 권한을 요구하기 때문에 sudo를 붙여 관리자 권한으로 실행한다.

프로그램 경로와 옵션

1
/usr/local/bin/app-version -v

/usr/local/bin은 시스템 전역 실행 파일이 놓이는 표준 디렉토리이고, -v는 버전 정보를 출력하는 옵션이다. 실행하면 “Version: 1.2.3” 같은 한 줄이 출력된다.

파이프와 gawk 처리

1
| gawk 'NR == 1 {print $2}'

파이프(|)로 앞 명령의 출력을 gawk(GNU AWK)에 넘긴다. NR == 1은 첫 번째 라인만 고르고, print $2는 그 라인의 두 번째 필드를 출력한다. 위 출력 예에서 두 번째 필드가 버전 번호인 1.2.3이다.


실제 사용 예제

1. 기본 사용법

1
2
3
4
5
# 버전 정보 추출
sudo /usr/local/bin/app-version -v | gawk 'NR == 1 {print $2}'

# 결과 예시
1.2.3

2. 변수에 저장

1
2
VERSION=$(sudo /usr/local/bin/app-version -v | gawk 'NR == 1 {print $2}')
echo "현재 버전: $VERSION"


고급 활용 방법

1. 조건부 필드 추출

1
2
# 특정 조건에 맞는 필드만 추출
gawk '$1 == "Version:" {print $2}'

2. 다중 필드 처리

1
2
# 여러 필드 동시 처리
gawk '{print $2, $3}'

3. 에러 처리 추가

1
2
3
4
5
6
#!/bin/bash
if ! version=$(sudo /usr/local/bin/app-version -v | gawk 'NR == 1 {print $2}'); then
    echo "버전 정보 추출 실패"
    exit 1
fi
echo "추출된 버전: $version"


결론

버전 문자열처럼 형식이 정해진 명령어 출력에서 특정 필드만 뽑을 때는 이렇게 gawk 한 줄이면 충분하다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.