grep 과 awk

운영하고 있는 서버의 로그를 볼 필요가 있을 때, 보통 grep 으로 로그 파일에서 필요한 정보를 검색하곤 한다. 그러나 grep으로 원하는 정보를 찾기가 힘들 경우가 있는데, 그럴때는 awk를 이용한다. 특히 특정 날짜의 access log 파일에서 API 호출 횟수를 셀때 애용하고 있다. 스크립트를 직접 작성해서 이용할 수 있기 때문에 복잡한 처리도 가능하다. 본 포스트에서는 grep과 awk의 사용법에 대해 알아보자.

grep

grep 은 파일의 라인에서 주어진 패턴을 검색하는 명령어이다. 해당 패턴과 일치되는 라인이 있다면 표준 출력으로 출력한다. 입력되는 라인의 길이는 메모리가 허용하는 한도내에서 제한이 없다.

  • 기본 사용법
    grep options pattern input_file_names
    

grep 예제

  • ex.txt
    2017/11/25_11:11:11.111 건빵 개발
    2017/11/25_12:12:12.222 만두 개발
    2017/11/25_13:13:13.333 포비 기획
    2017/11/25_14:14:14.444 낙타 개발
    2017/11/25_15:15:15.555 포비 개발
    

    주어진 파일이 위와 같다면, 다음과 같은 방법으로 검색 할수 있다.

  • 이름이 건빵인 라인 출력
    grep '건빵' ex.txt
    

특정 패턴을 가진 라인의 갯수도 출력 가능 하다.

  • 직군이 개발인 라인의 갯수
    grep -c '개발' ex.txt
    

특정 패턴이 아닌 라인을 출력할 수도 있다.

  • 직군이 개발이 아닌 라인 출력
    grep -v '개발' ex.txt
    

파이프(|)를 이용해서 원하는 결과를 검색할수 있다.

  • 이름이 포비이고 직군이 개발인 라인 출력
    grep '포비' ex.txt | grep '개발'
    

awk

awk 는 패턴 검색 및 처리 스크립트 언어이다. 주로 필드 단위로 패턴을 검색하고 조작한다. 주어진 패턴과 라인이 매치된다면 awk는 해당 라인에 대해 정의된 행동을 수행한다.

  • 기본 사용법
    awk 'program' input_file_names
    
  • 프로그램이 길다면 다음과 같이 이용하기도 한다
awk -f program_file input_file_names

awk 예제

  • ex.txt
    2017/11/25_11:11:11.111 건빵 개발 1
    2017/11/25_12:12:12.222 만두 개발 4
    2017/11/25_13:13:13.333 포비 기획 2
    2017/11/25_14:14:14.444 낙타 개발 3
    

    awk 에서 각 라인의 각 필드는 공백(“ “) 으로 구분 된다. 구분된 각 필드들은 $1 ~ $n 으로 접근할 수 있고 $0은 라인의 전체 내용을 담고있다.

따라서 2번째 필드를 출력하려면 아래와 같이 사용한다.

  • 2번째 필드 출력
    awk '{ print $2 }' ex.txt
    

if 를 이용해서 다음과 같은 조건문을 처리할 수 있다.

  • 4 번째 필드가 2 이상인 라인 출력
    awk '{ if ($4 >= 2) print $0; }' ex.txt
    

for 문을 이용해서 다음과 같이 반복적인 일을 수행할 수 있다.

  • 각 필드 별로 출력
    awk '{ for(i = 1; i <= 4; i++) print $i } ex.txt
    

wc 명령어와 같이 이용한다면 다음곽 같이 편리하게 갯수를 셀수 있다.

  • 이름이 건빵인 라인의 갯수출력
    awk '{ if ($2 == "건빵") print $0;}' ex.txt |  wc -l
    

sort 와 uniq를 이용해서 특정 필드의 각각의 값에 대한 갯수를 셀수 있다.

  • 각 직군별 라인 갯수
    awk '{ print $3 }' ex.txt | sort | uniq -c
    

주로 많이 사용하고 있는 grep과 awk의 사용법에 대해서 알아보았다. 간단한 사용법이지만 유용하게 잘 사용하고 있다.

더 복잡한 사용법에 대해 알고 싶다면 아래 References를 참조하자.

References

The GNU Awk User’s Guide - https://www.gnu.org/software/gawk/manual/gawk.html

GNU Grep 3.0 - https://www.gnu.org/software/grep/manual/grep.html


Keonwoo Kim

Your stylish, minimalist theme!