강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
특정 패턴문자를 원하는 포맷으로 처리하는 awk 실무활용 1편
조회 : 6,549  


특정 패턴문자를 원하는 포맷으로 처리하는 awk 실무활용 1




ㅇ 제작 : 리눅스포털 수퍼유저코리아(www.superuser.co.kr) 박성수


ㅇ 본 자료의 자세한 모든 정보는 http://www.superuser.co.kr/linuxcommandbible/ 에서 확인하시기 바랍니다.

ㅇ 본 자료의 수정 및 편집은 허용되지않습니다.



1. 특정 패턴의 문자들을 원하는 포맷으로 처리하는 강력한 유틸리티 awk 개론



awk1977Bell연구소의 Alfred v. Aho' Peter j. WenbergerBrian W. Kernighan에 의해 특정문자의 패턴을 원하는 포맷으로 처리하기 위해 개발된 쉘에서 바로 사용가능한 일종의 유틸리티이며 언어입니다. , 텍스트파일로 표준입력을 받아들여 목적에 맞게 출력할 수 있는 문자처리 언어입니다. 특정 문자들을 원하는 포맷에 맞게 출력하기위해 주로 쉘프로그램이나 쉘에서 바로 사용됩니다. 또한 awkgawk로 링크되어 사용하므로 둘은 동일한 명령어입니다.


awk를 사용하기 위해서 꼭 알아두셔야하는 것은 awk는 기본적으로 탭 또는 공백으로 구분되는 각각의 단어들을 하나의 변수로 처리합니다. , 탭과 공백을 기본적인 구분문자로 사용한다는 의미입니다. 하지만 탭과 공백을 무시하고 특정문자(:(콜론) ;(세미콜론) ,(콤마))를 구분문자로 처리하고자 한다면 -F옵션을 사용하면 됩니다. , -F옵션 다음에 원하는 특정문자를 지정하면 그 문자를 구분문자로 하여 각각의 단어들을 변수로 처리할 수 있습니다.


예를 들어 "-F: "으로 지정하였다면 ":"(콜론)문자를 구분문자로 하여 모든 단어들이 처리되며, 또한 "-F;"으로 지정하였다면 ";"(세미콜론)을 구분문자로 하여 모든 단어들이 처리됩니다.


그리고 awk를 사용할 때에는 거의 대부분 다른 명령어와 함께 사용됩니다. , awk사용의 대부분은 다른 명령어의 결과를 입력으로 받아서 처리하는 용도로 사용된다는 의미입니다.

다음 사용예에서 이 의미를 확인해 보시기 바랍니다.


명령어위치 : /bin/awk


사용형식


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

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


* 참고 : awk의 사용형식은 실제 사용예를 통해서 익히시는 것이 좋습니다.


이번 장에서는 awk의 문법적인 설명보다는 서버관리 측면의 실무에서 awk를 바로 활용할 수 있는 유용한 방법들을 알려드립니다.





2: /etc/passwd파일에서 계정명(ID)만 출력하기


웹호스팅서버 또는 많은 사용자들이 사용하는 서버의 /etc/passwd파일에는 수많은 사용자의 계정정보가 저장되어 있습니다. 이때 각 사용자의 ID만을 출력하고자 한다면 어떻게 하면 될까요? awk를 사용하면 간단히 처리할 수 있습니다. , /etc/passwd파일의 내용을 살펴보면 ":"(콜론)으로 계정 사용자정보의 항목들이 구분되어있다는 것을 알고 계실 것입니다.


, 간단히 /etc/passwd파일을 살펴보면 아래와 같이 관리자가 원하는 중요한 정보들이 많이 있습니다. , /etc/passwd파일에는 다음과 같은 정보들이 순서대로 기록되어 있습니다.


 계정명 : 패스워드부분 : UID : GID : 코멘트 : 홈디렉토리 : 기본사용쉘
  $1          $2         $3    $4      $5       $6             $7


이들 정보는 awk명령어의 필드분리명령에 의해 왼쪽에서 부터 차례대로 $1....$7에 대응됩니다. 이런 사항을 이용하여 /etc/passwd파일의 정보에서 원하는 부분만을 출력해주는 방법에 대해서 설명합니다.


, 아래의 예는 awk를 이용하여 /etc/passwd파일에서 각 계정사용자들의 ID만을 출력하는 것입니다.

[root@file root]# cat /etc/passwd | awk -F: '{print $1}'


좀 더 상세히 설명하면 위와 같이 "cat /etc/passwd"명령어로 /etc/passwd파일의 각각의 행들이 "|"(파이프명령어)에 의해 차례대로 awk의 입력으로 들어오게 됩니다. 이때 "-F:"에 의해 입력으로 들어온 /etc/passwd파일의 각각의 행들이 ":"(콜론)으로 구분됩니다. 예를들어 /etc/passwd의 내용중 아래와 같은 행이 있다고 가정 하겠습니다.


sspark:x:501:501::/home/sspark:/bin/bash


이 행은 "-F:"에 의해 각각의 항목들이 ":"(콜론)으로 구분되어 다음과 같은 awk의 입력변수로 작용합니다.


$1에는 sspark이 할당되고,

$2에는 x가 할당되며,

$3에는 501이 할당되고,

$4에는 501이 할당되며,

$5에는 공백이 할당되며,

$6에는 /home/sspark이 할당되고

$7에는 /bin/bash가 각각 할당됩니다.


이것이 바로 "-F:"의 의미입니다. 이제 awk에서 사용된 "-F:"의 의미를 확실히 아셨을 것이라 생각됩니다.


그렇다면 '{print $1}'는 어떤 의미일까요?


위의 의미 그대로 $1만을 출력(print)하라는 의미입니다.


설명이 다소 길어지기는 하였지만 아래 명령의 결과로는 /etc/passwd파일의 각각의 행들이 ":"(콜론)문자로 구분된 후 첫번째 단어인 각행의 ID들만이 결과로 출력이 됩니다.


[root@file root]# cat /etc/passwd | awk -F: '{print $1}'

root

bin

daemon

gopher

ftp

nobody

rpm

vcsa

nscd

sshd

rpc

rpcuser

nfsnobody

mailnull

smmsp

pcap

apache

squid

webalizer

xfs

named

ntp

gdm

postgres

bible

sspark

working

locli

mysql

test01

test02

test03

jinious

public

samba

[root@file root]#


첫번째 사용예의 설명을 정확하게 이해하시기 바랍니다. 이 사용예만 정확하게 이해한다면 다음 예들은 이 예를 조금 응용한 것이므로 쉽게 이해하실 수 있을 것입니다.


 

리눅스포털 –수퍼유저코리아- www.superuser.co.kr



[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1242


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
박성수
파파
헐렁고수