본문 바로가기
Tech Notes/Linux

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

by gbmin 2023. 4. 26.
반응형

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