본문 바로가기

언어/기타

awk 명령어 사용법과 예제

728x90

awk는 강력한 텍스트 처리 도구로, 주로 데이터를 검색하고 조작하는 데 사용된다. awk는 데이터를 행(row)과 열(column)로 처리하며, 텍스트 파일이나 명령어의 출력을 분석하고 조작할 수 있다. awk 명령어의 기본적인 사용법을 소개한다.

awk 명령어의 기본 문법

awk 'pattern {action}' file
  • pattern: 조건식으로, 이 조건을 만족하는 레코드(행)에 대해 action을 수행한다.
  • action: pattern과 일치하는 레코드에 대해 수행할 작업이다. {}로 묶어서 여러 작업을 수행할 수 있다.
  • file: 입력 파일이다. 파일을 지정하지 않으면 표준 입력을 사용한다.

awk의 주요 기능

1. 기본 사용법

awk 명령어는 기본적으로 입력 파일을 읽어 각 행에 대해 지정된 patternaction을 수행한다.

awk '{print $0}' file.txt
  • print $0: 각 행 전체를 출력한다.
  • file.txt: 입력 파일이다.

2. 필드(열) 처리

awk는 기본적으로 공백이나 탭을 구분자로 하여 필드를 나눈다. $1, $2, ...와 같은 방식으로 필드를 참조할 수 있다.

awk '{print $1, $3}' file.txt
  • $1: 첫 번째 필드.
  • $3: 세 번째 필드.
  • 첫 번째와 세 번째 필드를 출력한다.

3. 패턴 매칭

특정 패턴과 일치하는 행에 대해 작업을 수행할 수 있다.

awk '/pattern/ {print $0}' file.txt
  • /pattern/: 주어진 패턴과 일치하는 행을 찾는다.
  • 패턴과 일치하는 행을 출력한다.

4. 조건식 사용

if문을 사용하여 조건에 따라 작업을 수행할 수 있다.

awk '{if ($3 > 50) print $1, $3}' file.txt
  • $3 > 50: 세 번째 필드가 50보다 큰 경우.
  • 첫 번째 필드와 세 번째 필드를 출력한다.

5. 내장 변수

awk에는 다양한 내장 변수가 있다.

  • NR: 현재 레코드(행) 번호.
  • NF: 현재 레코드(행)의 필드(열) 수.
  • FS: 필드 구분자(기본값은 공백).
  • OFS: 출력 필드 구분자.
awk '{print NR, $0}' file.txt
  • NR: 행 번호.
  • 행 번호와 행 내용을 출력한다.

6. 필드 구분자 변경

필드 구분자를 변경하여 CSV 파일 등에서 사용할 수 있다.

awk -F ',' '{print $1, $2}' file.csv
  • -F ',': 필드 구분자를 콤마(,)로 설정.
  • 첫 번째 필드와 두 번째 필드를 출력한다.

7. BEGIN 및 END 블록

BEGIN 블록과 END 블록을 사용하여 파일 처리 전후에 작업을 수행할 수 있다.

awk 'BEGIN {print "Start"} {print $1} END {print "End"}' file.txt
  • BEGIN {print "Start"}: 파일 처리 전에 "Start"를 출력.
  • {print $1}: 각 행의 첫 번째 필드를 출력.
  • END {print "End"}: 파일 처리 후에 "End"를 출력.

8. 변수 사용

awk 내에서 변수를 선언하고 사용할 수 있다.

awk '{sum += $3} END {print "Sum:", sum}' file.txt
  • sum += $3: 각 행의 세 번째 필드를 합산하여 sum 변수에 저장.
  • END {print "Sum:", sum}: 파일 처리 후 sum 변수를 출력.

9. 함수 사용

awk는 내장 함수와 사용자 정의 함수를 지원한다. 내장 함수로는 문자열 함수, 수학 함수 등이 있다.

awk '{print toupper($1)}' file.txt
  • toupper($1): 첫 번째 필드를 대문자로 변환하여 출력.

사용자 정의 함수 예:

awk 'function square(x) {return x * x} {print square($1)}' file.txt
  • function square(x) {return x * x}: x의 제곱을 계산하는 함수 정의.
  • 각 행의 첫 번째 필드를 제곱하여 출력.

엑셀 대신 awk 써보기

awk 명령어는 텍스트 파일이나 데이터 파일을 처리하고 조작하는 데 매우 유용하다. 엑셀에서 수행하는 여러 작업을 awk 명령어를 통해 쉽게 할 수 있다. 다음은 실생활에서 awk 명령어가 쓰일 만한 10개의 예제와 엑셀에서의 유사한 작업을 비교하여 설명한 것이다.

1. 특정 열만 추출하기

awk 예제

awk '{print $2, $5}' data.txt
  • 두 번째와 다섯 번째 열을 추출하여 출력한다.

엑셀

  • 특정 열을 복사하여 다른 시트나 파일에 붙여넣기.

2. 조건에 맞는 행만 추출하기

awk 예제

awk '$3 > 100 {print $0}' data.txt
  • 세 번째 열의 값이 100보다 큰 행만 출력한다.

엑셀

  • 필터 기능을 사용하여 조건에 맞는 행을 필터링.

3. 열 합계 계산하기

awk 예제

awk '{sum += $3} END {print sum}' data.txt
  • 세 번째 열의 합계를 계산하여 출력한다.

엑셀

  • SUM 함수를 사용하여 열의 합계를 계산.

4. 특정 열의 평균 계산하기

awk 예제

awk '{sum += $3; count++} END {print sum / count}' data.txt
  • 세 번째 열의 평균을 계산하여 출력한다.

엑셀

  • AVERAGE 함수를 사용하여 열의 평균을 계산.

5. 행 번호 추가하기

awk 예제

awk '{print NR, $0}' data.txt
  • 각 행 앞에 행 번호를 추가하여 출력한다.

엑셀

  • 새로운 열을 추가하고 ROW 함수를 사용하여 행 번호를 추가.

6. 특정 패턴이 포함된 행 추출하기

awk 예제

awk '/error/ {print $0}' log.txt
  • 'error' 문자열이 포함된 행만 출력한다.

엑셀

  • 필터 기능을 사용하여 특정 텍스트가 포함된 행을 필터링.

7. 파일 병합하기

awk 예제

awk 'FNR==1 && NR!=1 {next} {print}' file1.txt file2.txt
  • 파일들을 병합하고 첫 번째 파일 이후의 헤더를 제거하여 출력한다.

엑셀

  • 여러 파일을 하나의 시트로 복사하여 붙여넣기하고, 중복된 헤더를 제거.

8. 특정 열의 최대값 찾기

awk 예제

awk 'BEGIN {max = 0} {if ($3 > max) max = $3} END {print max}' data.txt
  • 세 번째 열의 최대값을 찾는다.

엑셀

  • MAX 함수를 사용하여 열의 최대값을 찾기.

9. 열 데이터 정렬하기

awk 예제

awk '{print $3, $1}' data.txt | sort
  • 세 번째 열을 기준으로 데이터를 정렬하여 출력한다.

엑셀

  • 정렬 기능을 사용하여 열을 기준으로 데이터 정렬.

10. 열을 기준으로 그룹화하여 합계 계산하기

awk 예제

awk '{arr[$1] += $3} END {for (i in arr) print i, arr[i]}' data.txt
  • 첫 번째 열을 기준으로 그룹화하고, 각 그룹의 세 번째 열의 합계를 계산하여 출력한다.

엑셀

  • 피벗 테이블을 사용하여 열을 기준으로 데이터 그룹화 및 합계 계산.

마무리

awk 명령어는 텍스트 파일의 데이터를 처리하고 조작하는 데 매우 유용한 도구이다. 기본적인 사용법과 주요 기능을 익히면 다양한 데이터 처리 작업을 효율적으로 수행할 수 있다. 추가적으로 awk의 공식 문서와 튜토리얼을 참고하여 더 많은 기능과 고급 사용법을 익힐 수 있다.

반응형