gbmin's Tech Notes

서버 구축 및 유지보수, 클라우드 컴퓨팅, 네트워크 보안, IT 분야 기술 노트. :)

Tech Notes/Tools & Command

[Linux command] awk 명령어 옵션 및 사용법

gbmin 2023. 4. 26. 19:07

awk는 텍스트 데이터를 다루는데 유용한 명령어다.
awk는 파일 또는 파이프로부터 데이터를 읽어 들여서 특정한 패턴을 찾거나 조건에 맞는 데이터를 처리하고 출력하는 기능을 제공한다.
awk 명령어 옵션 및 사용 법에 대하여 작성하였다.

 

- 목차

1. 기본사용법

2. awk 변수

3. awk 연산자

4. awk 함수

5. 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