DevOps/Linux

리눅스 awk 명령어 - 1

알로그 2021. 6. 19. 21:35
반응형

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