리눅스 awk 명령어 사용법

개요

awk 란 무슨 뜻이며, 어떠한 의미를 가지고 있을까?

사전적인 의미를 찾아보게 되었다. 이 유틸리티를 작성한 A.V.Aho, P.J. Weinberger, B. Kernigham의 머리글자를 따온 것이며, 일종의 프로그래밍 언어지만 일반적인 언어라기 보다는 주로 패턴의 검색과 조작을 주목적으로 만들어진 것이다.

다시말해서, 파일의 각 라인에서 필드(field)를 인식할 수 있는 패턴 매칭 기능을 가지고 이들 필드를 자유자재로 조작 가능한 유틸리티를 작성하고자 만든 것이다.

awk의 응용분야

데이터 프로세싱, 리포트 작성, 간단한 데이터베이스 구축, 등

awk를 이용한 작업

  • 프로그래머가 자신이 작성한 프로그램의 입력 화일이 특정한 형식에 들어 맞게 이루어져 있는지 검사.
  • 출력화일을 처리하여 리포트를 만들어 냄.
  • 다른 프로그램의 입력 형식에 맞게 변환하는 작업에 이용.

awk 패턴 및 연산자, 변수 기타 변수 설명

awk 패턴

패 턴내 용
BEGIN입력화일을 읽어들이기 전에 옆에 제시되는 문자을 실행시키도록 한다.
ENDawk가 모든 입력을 처리한 후, 옆에 제시되는 문장을 실행시키도록 한다.
expression식을 평가한 후 이 식이 참, 즉 non-zero이거나 non-null인 경우 문장을 실행한다.
/re/정규식과 일치하는 문자열을 포함하고 있는 라인에서 문장을 실행한다.
compound-pattern복합패턴이라는 것으로 &&(and), ||(or) , !(not) 그리고 괄호에 의해 연결시킨 것이다. expression의 경우와 마찬가지로 복합 패턴도 참인 경우의 문장을 실행시킨다.
pattern1, pattern2이러한 패턴을 범위 패턴이라한다. 현재 처리되고 있는 라인이 pattern1과 일치되고, 다음에 따라오 는 라인 중 임의의 라인이 pattern2와 일치할 때, 범위 패턴은 두 라인 사이의 각 라인과 일치한다.

awk 연산자

연 산 자내용
= += -= *= /= %=배정(assignment)연산자
+ – * / % ++ —산술 연산자
|| && !논리 연산자(|| = OR, && = AND, ! = NOT)
> >= < <= == !=비교 연산자
v ~p변수 V가 패턴 P에 부합되면 참
v !~p변수 V가 패턴 P에 부합되지 않으면 참

awk에서 미리 정의된 몇가지 변수들

  • FILENAME – 현재 처리하고 있는 file의 이름
  • FS Field Separator – 필드 구분자
  • RS Record Separator – 레코드 구분자
  • NF Number of Fields – 현재 레코드의 필드 수
  • NR Number of Records – 현재 레코드의 번호
  • $1 – 입력되는 Record의 첫 번째 필드
  • $n – 입력되는 Record의 n 번째 필드
  • OFS Output Fields Separator – 출력시의 FS. 이 값을 변경하게 되면, 출력시의 FS가 바뀌게 된다.
  • ORS Output Records Separator – 출력시의 RS. 이 값을 변경하게 되면, 출력시의 RS가 바뀌게 된다.

일반적인 특수 문자

| Bar(|)의 왼쪽과 오른쪽의 논리적 OR 연산
+ 선행하는 패턴의 하나 또는 그 이상의 반복
? 선행하는 패턴이 없거나 또는 한번만 나타남을 의미
* 선행하는 패턴의 임의의 횟수의 반복
[] 대괄호([]) 사이의 임의의 문자 하나
[a-z] 두 문자 사이의 임의의 문자 하나
^ 라인의 처음을 의미
$ 라인의 마지막을 의미
. Period 위치의 문자 하나
다음 문자의 특수한 의미를 없앰
() 패턴을 그룹화 함

실전 명령어 사용방법

간단히 awk 의미에 대해서 확인해봤다. 지금부터는 간단히 실습을 통해 awk 명령어에 대해 자세히 확인해볼 것이다. 필드수를 구하는 명령어는 위에 설명한 것처럼 NF 명령어를 이용하면 된다.

awk '{print NF}' test.txt

테스트로 보여지는 test.txt 파일에 각각의 필드가 5개씩 있는걸 확인하였으며, 마지막 행의 경우 필드가 없기 때문에 0 으로 출력 된다.

이번에는 ‘swap’ 이라는 단어가 포함된 필드를 검색하는 방법에 대해서 확인해 보자.

awk '/swap/' test.txt 

명령어를 이용하여 test.txt 파일의 swap 이라는 단어가 포함된 필드를 출력된 모습이다.

for문 등 제어문을 사용할 수 있다.

변수 i는 1의 정수값(i=1)으로 시작하여 계속 1씩 증가(i++)한다. i 값이 레코드의 필드 수(NF)보다 작을 동안만 Action을 실행하는데, 출력될 필드도 변수 i 값에 맞추어 다르게 선정되는것이다. 결과적으로 모든 값이 출력 된다.

오늘은 리눅스 awk 명령어에 대해서 이정도만 설명하고 마치도록 한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다