반달가면 이글루에서 백업 - 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
'bash script' 카테고리의 다른 글
[bash: awk] 2개의 파일에 있는 자료 종합하기 (0) | 2023.08.08 |
---|---|
[bash: grep] 바이너리 파일에서 문자열 검색하기 (0) | 2023.08.08 |
[bash: strings] 바이너리 파일에서 문자열만 골라 출력하기 (0) | 2023.08.01 |
[bash: timeout] 특정 명령어/프로세스에 대한 실행 시간 제한 설정 (0) | 2023.08.01 |
[bash: basename] 디렉토리는 제외하고 파일명만 추출하기 (0) | 2023.08.01 |