OS/LINUX

17. awk

by coldplayer83 2026. 6. 29.
728x90
반응형

https://recipes4dev.tistory.com/171#google_vignette

 

리눅스 awk 명령어 사용법. (Linux awk command) - 리눅스 파일 텍스트 데이터 검사, 조작, 출력.

1. awk 명령어. 대부분의 리눅스 명령들이, 그 명령의 이름만으로 대략적인 기능이 예상되는 것과 다르게, awk 명령은 이름에 그 기능을 의미하는 단어나 약어가 포함되어 있지 않습니다. awk는 최

recipes4dev.tistory.com

 

awk

파일로부터 레코드를 선택하고, 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 것을 목적으로 사용하는 프로그램

  • 텍스트 파일의 전체 내용 출력
  • 파일의 특정 필드만 출력
  • 특정 필드에 문자열을 추가해서 출력
  • 패턴이 포함된 레코드 출력
  • 특정 필드에 연산 수행 결과 출력
  • 필드 값 비교에 따라 레코드 출력

 

awk는 "awk programming language"라는 프로그래밍 언어로 작성된 프로그램을 실행

awk는 기본적으로 입력 데이터를 라인(line) 단위의 레코드(Record)로 인식, 각 레코드에 들어 있는 텍스트는 공백 문자(space, tab)로 구분된 필드(Field)들로 분류

이렇게 식별된 레코드 및 필드의 값들은 awk 프로그램에 의해 패턴 매칭 및 다양한 액션의 파라미터로 사용됨

※ 레코드 구분 문자(newline)와 필드 구분 문자(space, tab)는 awk 프로그램 옵션으로 변경 가능

 

명령어 형식)

awk 명령어를 입력한 다음 작은따옴표를 둘러싸인 패턴이나 액션을 입력하고 마지막에 입력 파일 이름 지정

파일 이름을 지정하지 않으면 키보드 입력에 의한 표준 입력을 받음

awk는 입력된 라인들의 데이터들을 공백 또는 탭을 기준으로 분리해 $1부터 시작하는 각각의 필드 변수로 분리해 인식

awk [OPTION..] '[awk program]' [ARGUMENT..]
	OPTION
    	-F : 필드 구분 문자 지정
        -f : awk program 파일 경로 지정
        -v : awk program에서 사용될 특정 variable 값 지정
	awk program
    	-f 옵션이 사용되지 않은 경우 awk가 실행할 awk program 코드 지정
        '' 안에 작성
        구조)
        	pattern {action}
            	pattern을 생략하면 모든 레코드가 적용
                action을 생략하면 print가 적용
    ARGUMENT
    	입력 파일 지정 또는 variable 값 지정

 

awk program 코드에는 다양한 표현식, 변수, 함수 등이 사용됨

가장 중요한 변수는 레코드와 필드를 나타내는 변수로 하나의 레코드는 $0, 레코드에 포함된 각 필드는 그 순서대로 $1, $2, .., $n으로 지칭

 

예제)

 # 레코드의 길이가 10 이상인 경우 세번째($3), 네번째($4), 다섯번째($5) 필드를 출력
 awk 'length($0) > 10 { print $3, $4, $5} ' ./file.txt

 

BEGIN / END 패턴

awk가 BEGIN 패턴을 식별하면 입력 데이터로부터 첫 번째 레코드를 처리하기 전에 BEGIN에 지정된 액션을 실행

END 패턴은 BEGIN과 반대로 모든 레코드를 처리한 다음 END에 지정된 액션을 실행

awk 'BEGIN { print "TITLE : Field value 1,2"} {print $1, $2} END {print "Finished"}' file.txt

 

# 파일의 전체 내용 출력
awk '{print}' [FILE]

# 필드 값 출력
awk '{print $1}' [FILE]

# 필드 값에 임의 문자열을 같이 출력
awk '{print "STR"$1, "STR"$2}' [FILE]

# 지정된 문자열을 포함하는 레코드만 출력
awk '/STR/' [FILE]

# 특정 필드 값 비교를 통해 선택된 레코드만 출력
awk '$1 == 10 {print $2}' [FILE]

# 특정 필드들의 합 구하기
awk '{sum += $3} END {print sum}' [FILE]

# 여러 필드들의 합 구하기
awk '{ for (i=2; i<=NF; i++) total += $i }; END { print "TOTAL : "total }' [FILE]

# 레코드 단위로 필드 합 및 평균 값 구하기
awk '{ sum = 0 } {sum += ($3+$4+$5) } { print $0, sum, sum/3 }' [FILE]

# 필드에 연산을 수행한 결과 출력하기
awk '{print $1, $2, $3+2, $4, $5}' [FILE]

# 레코드 또는 필드의 문자열 길이 검사
awk ' length($0) > 20' [FILE]

# 파일에 저장된 awk program 실행
awk -f [AWK FILE] [FILE]

# 필드 구분 문자 변경하기
awk -F ':' '{ print $1 }' [FILE]

# awk 실행 결과 레코드 정렬하기
awk '{ print $0 }' [FILE]

# 특정 레코드만 출력하기
awk 'NR == 2 { print $0; exit }' [FILE]

# 출력 필드 너비 지정하기
awk '{ printf "%-3s %-8s %-4s %-4s %-4s\n", $1, $2, $3, $4, $5}' [FILE]

# 필드 중 최대 값 출력
awk '{max = 0; for (i=3; i<NF; i++) max = ($i > max) ? $i : max ; print max}' [FILE]
728x90
반응형

'OS > LINUX' 카테고리의 다른 글

19. 종료  (0) 2026.07.02
18. curl / telnet / ping / nc  (0) 2026.06.29
16. 네트워크 명령어  (0) 2026.06.22
15. 문자열 검색 / 치환  (0) 2026.06.12
14. 권한  (0) 2026.06.11

TOP

Designed by 티스토리