AWK 초보자 가이드
Mar 08, 2025
# programming
Lukas Schneider
DevOps Engineer · Leapcell

간결한 AWK 튜토리얼
I. 기본 개념
AWK는 Linux 시스템에 내장된 텍스트 처리 도구로, 구조화된 텍스트(예: 로그, CSV 파일) 처리에 특화되어 있습니다. 파일을 한 줄씩 읽고, 필드별로 데이터를 처리하며, 간단한 프로그래밍 로직을 지원합니다.
II. 기본 구문
1. 기본 형식
awk [옵션] '액션' 파일이름
2. 가장 간단한 예제
# 전체 파일 내용 출력 awk '{print $0}' demo.txt # 파이프를 통해 표준 입력 처리 echo 'this is a test' | awk '{print $0}'
3. 필드 처리
$1
: 첫 번째 필드$2
: 두 번째 필드$0
: 전체 줄NF
: 현재 줄의 총 필드 수$NF
: 마지막 필드
# 세 번째 필드 추출 echo 'this is a test' | awk '{print $3}' # 출력: a # 마지막에서 두 번째 필드 추출 echo 'a,b,c,d' | awk -F ',' '{print $(NF-1)}' # 출력: c
III. 핵심 기능
1. 필드 구분자
# 콜론을 구분자로 지정 awk -F ':' '{print $1}' /etc/passwd
2. 내장 변수
변수 이름 | 설명 | 예시 | |
---|---|---|---|
NR | 현재 줄 번호 | awk '{print NR}' file | |
FS | 입력 필드 구분자 (기본값: 공백) | awk -v FS=: '{print $1}' | |
OFS | 출력 필드 구분자 (기본값: 공백) | awk -v OFS=, '{print $1,$2}' | |
FILENAME | 현재 파일 이름 | awk '{print FILENAME}' file |
IV. 고급 작업
1. 조건부 필터링
# 정규 표현식 일치: "usr"을 포함하는 줄 출력 awk -F ':' '/usr/ {print $1}' /etc/passwd # 숫자 비교: 3번째 줄 이후의 내용 출력 awk -F ':' 'NR > 3 {print $1}' /etc/passwd # 결합된 조건 awk -F ':' '$1 == "root" || $3 > 1000' /etc/passwd
2. 내장 함수
함수 이름 | 기능 | 예시 | |
---|---|---|---|
toupper() | 대문자로 변환 | awk '{print toupper($1)}' | |
length() | 문자열 길이 | awk '{print length($1)}' | |
substr() | 부분 문자열 추출 | awk '{print substr($1,3,5)}' | |
rand() | 난수 생성 | awk '{print int(rand()*100)}' |
V. 제어문
1. 단일 줄 조건
# 홀수 줄 처리 awk 'NR % 2 == 1 {print "Line", NR}' file # 필드 비교 awk -F ':' '$3 > 1000 {print $1}' /etc/passwd
2. 다중 줄 로직
awk -F ':' '{ if ($1 > "m") { print "High:", $1 } else { print "Low:", $1 } }' /etc/passwd
VI. 실용적인 팁
- 형식화된 출력:
print
대신printf
사용awk -F ':' '{printf "%-10s %s\n", $1, $3}' /etc/passwd
- 대용량 파일 처리: 메모리 효율적인 줄 단위 처리
- 도구 통합:
grep
/sed
와 결합
VII. 빠른 참조
# 일반적인 명령 조합 awk -F ':' '/^root/ {print $1}' # root로 시작하는 줄 awk -F ':' '!/nologin/ {print $1}' # nologin을 포함하는 줄 제외 awk -F ':' '$3 ~ /[0-9]{4}/' # 4자리 숫자 필드 일치
최적화 노트:
- 계층적 제목 구조
- 명확성을 위한 변수/함수 테이블
- 코드 블록/출력 결과 대비
- 실용적인 팁 및 빠른 참조 추가
- 논리적 순서를 통해 학습 곡선 향상
- 적절한 간격과 들여쓰기로 가독성 향상
Leapcell: 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼
마지막으로, 배포를 위한 최고의 플랫폼인 **Leapcell**을 추천합니다.
1. 다국어 지원
- JavaScript, Python, Go 또는 Rust로 개발하십시오.
2. 무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하십시오. 요청도, 요금도 없습니다.
3. 최고의 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불합니다.
- 예: $25로 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
4. 간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
5. 간편한 확장성과 고성능
- 고도의 동시성을 쉽게 처리할 수 있도록 자동 확장됩니다.
- 운영 오버헤드가 없으므로 구축에만 집중하십시오.
Leapcell 트위터: https://x.com/LeapcellHQ