반응형
awk에 대해 학습해보자.
awk의 기본 기능은 텍스트 형태로 되어있는 입력 데이터를 행과 단어 별로 처리해 출력함
사용방법
$ aws [-f prog-file] [-F c] ['pattern {action}'] ... [filename]
표준 출력
이전에 sed에서 사용했던 파일(data.txt)을 그대로 사용한다.
표준 출력으로 처리된 결과를 내보내기 위해서는 print 함수를 사용하면 되는데, 중괄호를 사용해야 한다.
중괄호에 사용한 것을 action 이라고 한다.
awk에서 한 행은 자동적으로 여러 개의 필드로 구분되며, 그 기준은 공백 또는 탭이다.
현재 행에서 8번째 필드(열)를 출력하고 싶다면 다음과 같이 입력한다.
여러 개의 필드를 동시에 출력할 수도 있다.
$ awk '{print $2 $8}' data.txt
$ awk '{print $2, $8}' data.txt # 구분하기 위해 , 삽입
$ awk '{print NR": " $8}' data.txt # NR은 행 번호, " "를 통해 문자열 삽입 가능
입력 필드 구분자
입력된 행에 대해 깔끔하게 출력하고 싶은 경우 printf 함수를 쓸 수 있다.
두 번째 예제 같이 데이터가 하나의 필드로 입력된 경우는 F 옵션뒤에 필드 구분자를 적어주면 된다.
$ echo "2021 6 19" | awk '{ printf %s년 %s월 %s일\n", $1, $2, $3 }'
2021년 6월 19일
$ echo "2021-6-19" | awk -F- '{ printf %s년 %s월 %s일\n", $1, $2, $3 }'
2021년 6월 19일
패턴 매칭
먼저 샘플 파일을 만들자.
$ ps -ef > data.txt
특정 패턴이 포함된 행을 출력할 수 있다.
$ awk '/worker/' data.txt
조건문도 사용할 수 있다. 프로세스 아이디가 2000 이상인 행에 대하여 출력하는 경우는 다음과 같다.
$ awk '$2 >= 2000' data.txt
특정 필드에 대한 패턴 검색도 가능하다. 8번째 필드에서 worker라는 패턴이 포함된 행을 출력하는 명령은 다음과 같다.
$ awk '$8 ~ /worker/' data.txt
$ awk '$8 !~ /worker/' data.txt # worker라는 패턴이 포함되지 않는 행 출력
반응형
'DevOps > Linux' 카테고리의 다른 글
리눅스 sed 명령어 (0) | 2021.06.12 |
---|---|
리눅스 find 명령어 (0) | 2021.06.06 |
리눅스 - 네임서버 개념, 작동 방식 (0) | 2021.05.30 |
리눅스 - 디스크 명령어 du, df (0) | 2021.05.09 |
프록시 서버 설정, 리눅스 스퀴드(squid) (0) | 2021.05.02 |