반응형
awk는 텍스트 데이터를 효율적으로 처리하는 데 유용한 명령어다. 파일이나 파이프라인을 통해 데이터를 입력받아, 특정 패턴을 찾거나 조건에 맞는 데이터를 처리하여 출력할 수 있는 유용한 기능을 제공한다. awk 명령어의 사용법과 자주 사용 하는 옵션에 대해서 정리 하였다.
[목차]
1. 기본 사용법
awk 'pattern { action }' file
2. awk 변수
변수 | 설명 |
$0 | 현재 레코드 전체 |
$1, $2, ... | 현재 레코드에서 첫번째, 두번째, ... 필드 |
NF | 현재 레코드의 필드 수 |
NR | 현재 레코드 번호 |
FS | 필드 구분자 |
RS | 레코드 구분자 |
OFS | 출력 필드 구분자 |
ORS | 출력 레코드 구분자 |
3. awk 연산자
연산자 | 설명 |
+, -, *, /, %, ++, -- | 산술 연산자 |
==, !=, >, >=, <, <= | 비교 연산자 |
&&, ||, ! | 논리 연산자 |
+ | 문자열 연결 연산자 |
=, +=, -=, *=, /=, %=, ^= | 대입 연산자 |
4. awk 함수
함수 | 설명 |
length(string) | 문자열의 길이 반환 |
substr(string, start, length) | 문자열의 일부를 추출 |
index(string, search) | 문자열에서 검색 문자열의 위치 반환 |
match(string, regexp) | 문자열에서 정규 표현식에 맞는 문자열 검색 |
split(string, array, fieldsep) | 문자열을 필드 구분자(fieldsep)로 분리해서 배열(array)에 저장 |
printf(format, expr1, expr2, ...) | 형식화된 출력 |
sprintf(format, expr1, expr2, ...) | 형식화된 문자열 반환 |
5. awk 사용 예제
- 첫 번째 필드의 합을 구하기
awk '{ sum += $1 } END { print sum }' file.txt
- "moon"이 포함된 레코드를 출력
awk '/moon/ { print }' file.txt
- 쉼표(,)로 구분된 두 번째 필드를 출력
awk -F ',' '{ print $2 }' file.txt
- 두 번째 필드의 합을 구하기
awk '{ sum += $2 } END { print sum }' file.txt
- 두 번째 필드의 평균을 구하기
awk '{ sum += $2 } END { print sum/NR }' file.txt
- 두 번째 필드가 50보다 큰 경우 레코드를 출력
awk '$2 > 50 { print }' file.txt
- 두 번째 필드($2)가 50보다 크고, 세 번째 필드($3)가 'male'인 경우 출력
awk '$2 > 50 && $3 == "male" { print }' file.txt
- '|' 구분자로 구분된 세 번째 필드($3)를 출력
awk -F '|' '{ print $3 }' file.txt
- moon을 sun으로 변경해서 출력
awk '{ gsub("moon", "sun"); print }' file.txt
- 'file.txt' 파일의 각 레코드를 공백을 구분자로 분리한 후, 분리된 필드를 한 줄씩 출력
awk '{ split($0, fields, " "); for(i in fields) { print fields[i] } }' file.txt
- 정규 표현식을 사용하여 패턴을 검색, 처음부터 시작하는 단어가 "moon"인 레코드를 찾아서 출력
awk '/^moon/ { print }' file.txt
- 각 레코드의 길이를 출력
awk '{ print length }' file.txt
- 필드를 조합하여 새로운 필드를 생성, 첫 번째 필드($1)와 두 번째 필드($2)를 하이픈(-)으로 이어 붙여 출력
awk '{ print $1 "-" $2 }' file.txt