[bash: awk] 특정 위치(field)에 대한 정규표현식 문자열 검색 리눅스 bash script

awk에서 특정한 위치(field)에 대하여 문자열을 검색하는 방법은 이전에도 정리해 둔 바가 있지만(여기로), 정규표현식(regular expression)으로 검색할 수 있는 훌륭한 방법이 있어서 이것도 정리해 두기로.

예를 들어 my_data.txt 파일에서 3번째 단어가 두자리 16진수인 경우(00~FF)에만 행 전체를 출력하는 상황을 생각해 보자. 정규표현식으로는 "^[0-9A-Fa-f][0-9A-Fa-f]$" 이렇게 될 것이다. awk에서 "[위치] ~ /문자열/" 형식으로 지정해 주면 된다. 터미널창에서 아래와 같이 입력.

# my_data.txt에서 세번째 단어가 두자리 16진수면 행 전체 출력
awk '$3 ~ /^[0-9A-Fa-f][0-9A-Fa-f]$/ { print $0 }' my_data.txt

공백이 아닌 다른 구분자(field separator)를 사용해야 한다면 -v 옵션을 이용해서 구분자 관련 awk 내부변수인 FS(입력 구분자), OFS(출력 구분자)를 설정해 주면 된다. (이전 게시물을 참고하자. 여기로 http://bahndal.egloos.com/439244)

쉼표(,)를 구분자로 사용한 my_data.csv 파일에서 위의 예시와 같은 작업을 하고 싶다면 아래와 같이 입력하면 된다.

awk -v FS="," '$3 ~ /^[0-9A-Fa-f][0-9A-Fa-f]$/ { print $0 }' my_data.csv



덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

627349
4728
1719422

ad_widget_2