본문 바로가기
다양한 TIP

linux awk 사용법 기초부터 알아보기

by 유기농프로그래밍 2022. 4. 8.
반응형

awk란?

리눅스에서 awk 라는 명령어가 있습니다. 이 명령어는 사실 데이터를 조작하고 리포트를 생성하기 위해 사용하는 언어입니다. awk는 Alfred Aho, Peter Weinberger, Brian Kernighan 세명이 만들었는데, 이들의 이름의 이니셜을 가져와서 만든 겁니다.

 

awk 프로그래밍 형식

파일로부터 입력

awk는 awk 명령어 다음 작은따옴표로 둘러싸인 패턴이나 명령을 입력하고 마지막으로 입력 파일을 쓰면 됩니다. 마지막에 입력 파일이 없다면 표준입력으로부터 입력을 받을 수 있습니다.(stdin) 일반적으로 입력받은 데이터는 공백 또는 탭을 기준으로 분리하여 각각을 필드 변수로 분리 인식합니다. 크게 3가지 모양이 있으니 awk의 형식을 확인해보기 바랍니다.

command | awk 'pattern'
command | awk '{action}'
command | awk 'pattern {action}'

 

말이 어려우니 예제를 보면 이해가 쉬울 것 같습니다.

 

파일로부터 패턴 출력

awk 'pattern' filename

// 사이에 패턴을 입력하면 해당 내용을 포함하고 있는 라인만 출력됩니다.

 

필드 분리자 변경(FS - 필드 분리자)

공백을 기준으로 분리되는 필드 중 왼쪽부터 첫번째로 나오는 필드가 $1로 표현됩니다. '{print $1}' 로 공백 기준 첫번째 필드를 출력한 겁니다. 두번째는 공백 대신 다른 문자열을 기준으로 나누는 방법인데 -F 옵션을 이용하여 -F'[기준]' 으로 입력합니다. /를 기준으로 첫 /가 나오기 전까지 $1이 되게 됩니다.

 

개행 기준 검색과 출력을 동시에 적용할 수도 있습니다.

위와 같이 1990년생인 사람이름을 출력해주는 명령을 만들 수 있죠.

 

명령어로부터의 입력

위 예제에서는 파일을 이용해서 데이터를 얻었다면, 명령어로부터 입력 받아 처리할 수도 있습니다. |(파이프라인)을 이용하여 출력 명령어들을 통해 awk를 이용할 수 있지요.

 

어떤 명령어를 통해 데이터가 출력된다면 그 출력된 데이터를 기반으로 파이프라인을 통해 awk를 쓰면 됩니다.

예를 들어 disk free를 뜻하는 df 명령어를 입력하면 위와 같이 뜨게 됩니다.  이를 udev 가 들어있는 줄만 필터해서 공백을 기준으로 한 첫번째와 두번째 값을 print 하도록 한 내용입니다.

 

조건식 두기

조건을 두어 출력하는 방식입니다. '' 사이에 조건을 두면 해당 조건에 맞는 값이 필터되어 출력됩니다. 위와 같이 $2(공백 기준 두번째) 값이 10000000 보다 큰 값만 필터하라는 의미인데요. 필터된 값이 결과로 출력되게 됩니다.

 

print 함수

awk 형식을 보면 {} 로 둘러싸인 action 이 있습니다. print는 action 으로 쓸 수 있는 함수인데요. 위의 예시들에서 자주 사용했으니 대략 내용은 이해하셨겠죠? print는 문자열을 ""(쌍따옴표)로 둘러싸서 입력하면 해당 문자열을 출력해주고, ,(콤마)를 이용하여 아규먼트들을 분리해 줍니다. ,(콤마)를 사용하지 않으면 쭉 이어서 출력되겠죠.

아래는 print 함수의 escape 문자들입니다.

문자 의미
\b 백스페이스
\f 폼피드
\n 새줄(newline)
\r 캐리지 리턴(carriage return)
\t 탭(tab)
\050 8진수(왼쪽은 괄호를 뜻함)
\c 문자를 대표

 

예시로 8진수만 나타냈습니다.

반응형

댓글