본문 바로가기
I T/Linux

AWK 명령어의 활용 방법. 1탄

by 루솨 2015. 8. 21.


AWK는 1977년 bell 연구소의 Aho, Weinberger, Kernighan 에 의해  만들어졌으며 유래되었습니다.

특정 패턴을 원하는 포맷으로 처리하기 위해 개발된 Shell 에서 바로 사용 가능한 일종의 유틸리티이며 언어이고

 텍스트 파일로 표준 입력을 받아들여 목적에 맞게 출력 할 수 있는 문자처리 언어입니다.

쉘프로그램이나 쉘에서 바로 사용이 가능하고 C언어와 유사한 프린팅, 제어연산자도 가지고 있습니다.


서버 업무를 하다보면 서버의 내의 파일중에 원하는 출력문 또는 

몇몇 가지를 필터 하거나 특정 필드의 값만 필요한 경우가 있는데

 sort , grep , cut 등의 명령어 처럼 awk  또한 많이 쓰이고 있습니다.


awk 명령어의 형식과  활동 방법에 대해서 몇가지 적습니다.

▣ 명령어 형식

실행파일 위치 : /bin/awk 

사용형식 : 

 awk [옵션] '스크립트' [변수=값] [파일..]

 awk [옵션] [-F] '{스크립트}'


▣ 활용방법


예를들어 설명하겠습니다. ( 개인취향이 섞여 여자가수로만 ..예로 듭니다. )

첫번째 열은 가수 또는 그룹 이름,  2번째 열은  앨범 가격 , 3번째 열은 1분기 판매량.  

                  4번째 2분기,  5번째 3분기 ,  6번째 열은 4분기 판매량 입니다.


hoon-pc test # cat awk.test                      <==  파일이름은  awk.test 

IU         15,500   22   42   31   55

Sosi      16,000   34   49   12   47

missA   14,000   24   33   41   34

Apink   14,500   26   36   49   41

Aoa      15,000   32   35   29   52


1. 위 자료로 토대로   2가지 필드를 추가 시킬려고 합니다.        

   첫번째는 .1분기부터 4분기의 앨범판매 숫자 합계.    

   두번째는.  앨범 총 판매 액수를 넣어주고싶습니다.

   

  다음과 같이 vi 로 열어 해당 구분을 넣어주고 저장하고 나옵니다.

    vi add.test 

    {total=$3+$4+$5+$6;print $0, total, total*$2}


hoon-pc test # awk -f add.test awk.test 

IU       15,500 22 42 31 55 150 2250

Sosi    16,000 34 49 12 47 142 2272

missA 14,000 24 33 41 34 132 1848

Apink 14,500 26 36 49 41 152 2128

Aoa    15,000 32 35 29 52 148 2220


이런 결과 값이 나오는 이유는 add.test 에 들어 있는 구문에 의해서 인데  구문안의 ;  로 의하여 두가지로 분류가 되었습니다.

첫번째 부분은  분기별 판매량을 다 더하고 그걸 total 변수 선언해준것. , 

두번째는 판매량 총합의 total 의 변수값에서 X$2 를 해주는데  이건 합계 X두번째 열을 뜻합니다.


2. awk 패턴과 연산

  awk가 읽어들이는 라인과 필드들의 대한 작업은  패턴-연산의 쌍으로 정의 되며 이쌍은 다음과 같은 형식을 갖습니다.

       pattern {action}

    이번에 해볼 연산은  입력 필드의 순서를 바꿔서 출력 해보겠습니다.

   

hoon-pc test # awk '{print $2, $1}' awk.test      <=== vi 로 파일 하나 만든후 안에 구문을 넣고 

                                                                                      awk -f 구문파일명 대상파일명  으로 해도 됩니다.

15,500 IU

16,000 Sosi

14,000 missA

14,500 Apink

15,000 Aoa

이런식으로  바꾸워서 출력을 합니다.


   이번에는 Sosi 라는 패턴과 일치하는 라인을 뽑고 순서 바꿔서 출력하기.

hoon-pc test # awk '/Sosi/ {print $2, $1}' awk.test 

16,000 Sosi



   이번에는 첫글자가 A 로 된것중에  추가로 넣을 단어도 입력 해보겠습니다.

hoon-pc test # awk '/^[A]/ {print $1, "Good~!"}' awk.test

Apink Good~!

Aoa Good~!

 정규식 표현을 써서 출력을 해봤는데요  첫번째 열중에 대문자 A로 되어있는 행을 찾고   

그 행중에  첫번째 열만 출력 하시오 라는 의미로 보시면 됩니다.

우리 여가수분들 잘 걸러서 출력 되네요. 굳 ㅜㅜ


좀더 정리해서 2탄 준비 하겠습니다~!!