awk??

  • 리눅스에서 데이터를 조작하여 출력하는 패키지
  • Alfred Aho, Peter Weinberger, Brian Kernighan 3명이 만들었는데 이들의 이름 이니셜을 가져와서 awk라고 부름
  • 로그를 볼때, 특정 파일을 분석할때 유용하다

기본 Input 사용법

  • 두가지 방법으로 input을 넣을수 있다.
  1. input file을 직접 넘겨주는 경우
    • awk {command} {input file}
  2. pipeline을 쓰는 경우
    • cat {input file} | awk {command}

기본 명령 사용법

  • awk는 기본적으로 text를 구분하는 구분자 FS를 가진다.
    • default FS는 공백이며 변경은 -F옵션으로 가능하다.
      awk -F',' ...
  • 또한 newline으로 구분되는 line에 대해서 pattern을 적용하여 검색이 가능하다.
  • 명령 패턴
    • pattern = line검색, command = awk명령
      awk 'pattern'
      awk '{command}'
      awk 'pattern {command}'

예시

awk '/test/' {inputfile}
  • inputfile에서 test라는 패턴을 가진 line을 찾는다.
awk '{print $1}' {inputfile}
  • inputfile의 모든 line에 대해서 공백으로 라인을 잘라서 가장 첫번째에 있는 데이터를 출력한다.
  • print : awk가 출력을 위해서 사용하는 명령,
    • printf도 가능하다:
      awk '{printf("%s", $1)}' {inputfile}
    • $1: awk는 구분자(FS)로 구분된 데이터들을 각 번호에 할당한다 (100개까지 가능?)
      • $0: 전체 라인
      • $1: 첫번째 데이터
      • $2: 두번째 데이터
      • ...
awk -F',' '/test/ {printf("%s", $2)}' {inputfile}
  • inputfile에서 test라는 패턴을 가진 line을 찾아서 콤마(,)로 구분하여 2번째에 있는 데이터를 출력한다.

활용

특정 프로세스를 찾아 해당 프로세스의 pid에 대해서 signal을 날리고 싶을 때

  • 일단 pid가 몇번째 필드인지 확인한다

    garyj@GaryJ-MacBookPro❯ ps aux | head
    USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
    garyj            88274  10.8  2.3  5898556 392404   ??  S    월09AM  91:09.44 /Applications/iTerm.app/Contents/MacOS/iTerm2
  • 2번째 필드 이므로 아래와 같이 pid를 출력한다(대상 프로세스 iTerm)

    garyj@GaryJ-MacBookPro❯ ps aux | awk '/iTerm/ {print $2}'
    88274
  • kill로 signal을 날린다

    ```bash
    garyj@GaryJ-MacBookPro❯ kill -9 $(ps aux | awk '/iTerm/ {print $2}')

BELATED ARTICLES

more