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