awk 명령어

기본사용법

awk 명령어는 [ 패턴 ] [ command ]로 이루어진다

  • 패턴부분에는 '정규표현식'이나 '조건 표현식(true/false)'이 올 수 있다
    • 정규식 예:/^hello$/
    • 조건표현식 :$ 1>=0
  • command 부분은 조건/반복/산술/논리/삼항/증감/대입 연산자 등을 사용가능하다
  • 아무 command를 지정하지 않으면, 패턴에 매칭된 줄을 그대로 출력한다
  • command 부분은 { }로 감싼다
    • { if( $1>=0 ) { print "hello"; } }

정규 표현식

  • 정규 표현식을 사용하려면 /로 감싸야 한다
  • grep, sed와 마찬가지로 정규표현식 메타문자를 사용할 수 있다
  • 단, 단어 지시자 \<\>, 캡쳐 \(\), 반복지시자{}는 사용할 수 없다.
# 정규 표현식 /^hello/에 매칭되는 줄을 그대로 출력한다.
$ awk '/^hello/' file

필드 구분자

awk는 필드 구분자를 기준으로 각 줄의 필드를 나누어 처리한다. FS라는 이름의 내장 변수로 관리되며 기본값은 tab/space이다

$ cat mydata.txt
hello 3
my 4
is 5

# 기본 FS인 space에 의해 필드가 나위었다. print 함수를 이용하여 첫번째 필드를 출력한다.  
$ awk '{print $1}' mydata.txt
hello
my
is
정규식 패턴을 활용하여, /hello/에 매칭된 모든 줄의 두번째 필드($2)를 출력한다.

이 때 $1와 $2 사이에 콤마(,)를 사용하였는데, 공백으로 출력되었다
print 명령에서의 콤마는 '출력필드구분자'를 의미하는 OFS라는 이름의 내장변수 값으로 치환되는데, OFS의 기본값은 space라서 콤마 대신 space가 출력되었다.

$ awk '/hello/{print $1, $2}' mydata.txt
hello 3
조건표현식을 활용하여, 두 번째 필드 값이 1보다 큰 줄만 출력한다
$ awk '$2 > 4' mydata.txt
is 5

참고 : http://so-blog.net/2016/05/03/awk/

results matching ""

    No results matching ""