텍스트 데이터를 처리하다보면 grep, sed, awk 등을 많이 사용하게 된다. 특히 awk는 많은 built-in 함수들을 갖고 있어 딱히 프로그래밍언어로 코딩하지 않아도 커맨드라인에서 간단한 셸프로그래밍을 통해 원하는 형태의 데이터를 얻어내는데 많이 쓰인다.
awk 의 built-in 함수들 중 특히 문자열을 처리하기 위해 많이 쓰이는 것으로는, match, split, substr 등이 있는데, 예는 다음과 같다.
a.txt 에서 두번째 컬럼에 "NN"이 포함된 경우만 해당 라인을 출력
cat a.txt | awk '{ if ( match($2,"NN") ) print $0}'
a.txt 에서 두번째 컬럼이 "NN"으로 시작하는 경우만 해당 라인을 출력
cat a.txt | awk '{if (substr($2,0,2) == "NN" ) print $0}'
와 같이 사용할 수 있다. 또, 데이터 b.txt가
21234 apple:과일:3:자동차에서 과일을 먹었다.
21236 car:자동차:6:과일은 자동차에서 먹는게 제맛.
21235 banana:과일:1:212:과일을 자동차에 싣고 간다.
21236 car:자동차:6:과일은 자동차에서 먹는게 제맛.
21235 banana:과일:1:212:과일을 자동차에 싣고 간다.
와 같이 되어 있을 때, 두번째 컬럼의 단어에 대한 레이블이 "과일" 인 것만을 추출하면 몇가지 방법이 있을 수 있겠으나
cat b.txt | awk '{ split($2,arr,":"); if ( arr[2] == "과일") print $0; }'
와 같이 구현할 수 있다. 즉 split( string, array, delimeter) 함수는, string을 delimeter 를 기준으로 쪼개어 array에 넣는 함수이다.
그 외에도 많은 built-in 함수들이 있는데, http://www.math.utah.edu/docs/info/gawk_13.html 에서 참고하여 사용하면 편리하다.


