bash script2023. 8. 8. 12:02

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/596542

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(출력 구분자)를 설정해 주면 된다. (이전 게시물을 참고하자. 여기로)

 

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

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

 

728x90
Posted by 반달가면