awk

OS/리눅스 & 유닉스 2012. 3. 20. 13:45

awk란?

  • text 데이터나 리포드를 작성 하는 데 사용 되는 프로그래밍 언어.
  • 표준입력 으로 들어오는 데이타를 처리하여 , 표준 출력으로 출력 하는 프로그램
  • 프롬프트상에서 간단히 입력 할 수도 있고, 복잡한 프로그램을 작성 할 수도 있다

AWK command format

파일을 통한 입력

awk 'pattern' filename
awk '{ action }' filename
awk 'pattern { action }' filename 

ex>
$ awk '/닉스/' employees                   // 패턴검색
$ awk ' { print $1 }' employees           // 파일의 모든 라인에 대해서 해당 명령 처리
$ awk '/닉스/{ print $1,$2 }' employees    // 패턴검색 후 해당 라인에 대한 명령 처리

파이프를 통한 입력.

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

ex>
  $ df | awk '$4 > 300000'
  $ w | awk '/fith/{ print $1,$3 }' 

출력 형식 지정 (print)

  $ date | awk '{print "현재 년도 :" $1 "\n현재 월 : " $2}' 

  - \b : 백 스페이스            - \f : form feed    - \n : new line
  - \r : carriage return     - \t : tab          - \x : escape caracter x 

  $ awk '/닉스/{print "\t\tHave a nice day," $1,$2 "!"}' employees 

C style output format ( printf )

  $ echo "UNIX" | awk '{ printf "|%-15s|\n",$1 }'
  $ echo "UNIX" | awk '{ printf "|%15s|\n",$1 }'
  $ awk '{ printf "The name is: %-15s ,ID is %8d\n", $1$2,$3 }' employees 

  - %c : ASCII 문자 하나.   - %s : ASCII 문자열.     - %f : 부동소수점. 
  - %d : 10 진수.          - %o : 8 진수 .          - %x : 16 진수 .

AWK script

사용 예

  $ awk -f awkfile employees 

AWK 의 시스템 변수

변수설명
FILENAME 현재파일명
FS 필드 구분자
NF 현재라인의 필드 수
NR 현재라인의 레코드 번호
OFMT 숫자 출력을 위한 포맷(예를 들어 %.6g)
OFS 출력 필드 구분자(디폴트는 blank)
ORS 출력 레코드 구분자(디폴트는 newline)
RS 레코드 구분자(디폴트는 newline)
$0 전체 입력라인
$n n번째 필드의 내용(각 필드는 FS로 구분된다.)

AWK 의 시스템 변수 세부 설명

  • Records AND Fields
    • Records : awk 는 입력의 한 라인, 한 라인을 Record 라고 부른다.
    • The Record Separator
      • awk 는 기본적으로 carriage return 으로 각 record 를 구분.
      • ORS ,RS 등의 내부 awk 내부 변수로 제한적으로 조정 가능.
  • $0 : awk 는 $0 으로 record 전체를 참조 할수 있다. print 의 기본 값으로 사용 된다.
  $ awk '{ print $0 }' employees
  $ awk '{ print }' employees 
  • NR : awk 는 처리한 record 의 번호를 NR 이라는 내부 변수로 저장 한다. ($NR 아님!)
  $ awk '{ print NR , $0 }' employees 
  • Fields : awk 의 각 record 는 space,tab 으로 구분된 단어로 이루어져 있는데, 이 단어들을 Field 라 부른다.
    • The Fields Separators
      • awk 는 기본적으로 spacebar ,tab 등으로 각 field 를 구분.
      • -F 옵션이나 ,FS 변수를 통해 변경 가능. -F 옵션이 주로 쓰인다.
  $ awk -F: '/^root/{print $6 ,$7}' /etc/passwd
  $ awk -F'[ :\t]' '{ print $1,$2,$3}' /etc/passwd 

Regular Expression

  $ awk '/^[A-Z][a-z]+ /' employees
  $ awk '$1 ~ /[Bb]ill/' employees
  $ awk '$1 !~ /[Bb]ill/' employees 

Operators

  • < , ⇐ , == , != , >=, > ,&& ,||,!
  $ awk '$3 > 1234' employees
  $ awk '$3 > 1234 && 4500 > $3' employees
  $ awk '!($3 < 1234 || 4500 < $3)' employees

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

nohup  (0) 2012.03.22
awk 변수 shell 변수에 저장  (0) 2012.03.20
Four Ways to Pass Shell Variables in AWK  (0) 2012.03.20
shell file read line  (0) 2012.03.20
awk 외부 변수 참조  (0) 2012.03.20
: