개요
`gawk`는 텍스트 데이터를 행과 필드 단위로 처리하는 데 특화된 프로그래밍 언어입니다. 정규 표현식을 사용하여 복잡한 패턴 매칭을 수행하고, 조건부 로직, 루프, 변수 등을 활용하여 데이터를 유연하게 조작할 수 있습니다. 특히 로그 파일 분석, CSV/TSV 파일 처리, 시스템 보고서 생성 등에 매우 유용합니다.
주요 특징
- 정규 표현식을 이용한 강력한 패턴 매칭
- 행(record) 및 필드(field) 기반 데이터 처리
- 내장 변수 및 함수 제공 (NR, NF, $1, $2 등)
- BEGIN/END 블록을 통한 전처리 및 후처리 기능
주요 옵션
`gawk`는 다양한 옵션을 통해 스크립트 실행 방식과 데이터 처리 방법을 제어할 수 있습니다.
스크립트 및 입력 제어
호환성 및 디버깅
생성된 명령어:
명령어를 조합해 보세요.
설명:
`gawk` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 예시
다음은 `gawk`를 사용하여 텍스트 데이터를 처리하는 몇 가지 일반적인 예시입니다.
파일의 각 줄에서 첫 번째와 세 번째 필드 출력
echo "apple 10 red\nbanana 20 yellow\norange 30 orange" | gawk '{print $1, $3}'
공백으로 구분된 파일에서 첫 번째와 세 번째 필드만 출력합니다.
특정 패턴을 포함하는 줄만 출력
echo "INFO: System started\nERROR: Disk full\nWARNING: Low memory" | gawk '/ERROR/ {print}'
입력에서 'ERROR' 문자열을 포함하는 모든 줄을 출력합니다.
필드 구분자를 쉼표(,)로 지정하고 두 번째 필드 출력
echo "Name,Age,City\nAlice,30,New York\nBob,24,London" | gawk -F',' '{print $2}'
쉼표로 구분된 CSV 데이터에서 두 번째 필드만 추출합니다.
BEGIN 블록을 사용하여 헤더 출력 후, 각 줄의 필드 수 출력
echo "A B C\nD E" | gawk 'BEGIN {print "Field Count:"} {print NF}'
처리 시작 전에 헤더를 출력하고, 각 줄의 필드 개수를 보여줍니다.
외부 변수를 사용하여 조건부 처리
echo "item1 5 8\nitem2 12 15\nitem3 3 7" | gawk -v threshold=10 '$3 > threshold {print $0}'
외부에서 정의된 `threshold` 값보다 세 번째 필드가 큰 줄만 출력합니다.
설치
`gawk`는 대부분의 리눅스 배포판에 기본적으로 포함되어 있지만, 없는 경우 다음 명령어를 사용하여 설치할 수 있습니다.
Debian/Ubuntu
sudo apt update && sudo apt install gawk
Debian 또는 Ubuntu 기반 시스템에서 `gawk`를 설치합니다.
RHEL/CentOS/Fedora
sudo yum install gawk # 또는 sudo dnf install gawk
RHEL, CentOS 또는 Fedora 기반 시스템에서 `gawk`를 설치합니다.
팁 & 주의사항
`gawk`를 더욱 효과적으로 사용하기 위한 팁과 주의할 점입니다.
성능 최적화
- 큰 파일 처리 시, 불필요한 연산을 피하고 필요한 필드만 처리하도록 스크립트를 최적화하세요.
- 정규 표현식은 복잡할수록 성능 저하를 일으킬 수 있으므로, 가능한 한 단순하게 유지하세요.
자주 사용되는 내장 변수
`gawk`는 데이터 처리에 유용한 여러 내장 변수를 제공합니다.
- NR: 현재 레코드(줄) 번호
- NF: 현재 레코드의 필드(컬럼) 수
- FNR: 현재 파일 내 레코드(줄) 번호
- $0: 현재 레코드 전체
- $1, $2, ...: 각 필드의 값
스크립트 파일 사용
복잡한 `gawk` 스크립트는 명령줄에 직접 입력하기보다 `-f` 옵션을 사용하여 별도의 파일로 관리하는 것이 가독성과 유지보수 측면에서 좋습니다.