Awk 기본
awk 이용
awk란 이름은 이 유틸리티를 작성한 A.V.Aho, P.J. Weinberger, B. Kernigham의 머리글자를 따온 것으로 주로 패턴의 검색과 조작을 주목적으로 만들어진 것이다. 즉 파일의 각 줄에 필드(field)를 인식할 수 있는 패턴 매칭 기능을 가지고 이들 필드를 자유자재로 조작 가능한 유틸리티를 작성하고자 만든 것이다.
awk 패턴 매칭
awk pattern {action} filenames
awk -f parttern-action-file filenames
- filenames: 입력화일 awk실행 action을 가진 프로그램 file
패턴내용
| 패턴 | 설명 |
| —————— | ——————————————————————————————————————————————————————————————– | — | ————————————————————————————————————————— |
| BEGIN | 입력화일을 읽어들이기 전에 옆에 제시되는 문자을 실행시키도록 한다. |
| END | awk가 모든 입력을 처리한 후, 옆에 제시되는 문장을 실행시키도록 한다. |
| expression | 식을 평가한 후 이 식이 참, 즉 non-zero이거나 non-null인 경우 문장을 실행한다. |
| /re/ | 정규식과 일치하는 문자열을 포함하고 있는 라인에서 문장을 실행한다. |
| compound-pattern | 복합패턴이라는 것으로 &&(and), | | (or) , !(not) 그리고 괄호에 의해 연결시킨 것이다. expression의 경우와 마찬가지로 복합 패턴도 참인 경우의 문장을 실행시킨다. |
| pattern1, pattern2 | 이러한 패턴을 범위 패턴이라 한다. 현재 처리되고 있는 라인이 pattern1과 일치되고, 다음에 따라오 는 라인 중 임의의 라인이 pattern2와 일치할 때, 범위 패턴은 두 라인 사이의 각 라인과 일치한다. |
awk에서 찾은 내용은 다음 변수에 저장되어 있다.
| 변수 | 내 용 |
|---|---|
| FILENAME | 현재 처리되고 있는 입력 파일의 이름 |
| FS | 입력 필드 분리문자 |
| NR | 현재 레코드(행)의 번호 |
| NF | 현재 레코드(행)의 필드의 갯수 |
| OFS | 출력되는 필드의 분리문자 |
auth.log 패턴 분석
1 | Apr 16 06:43:04 homepi sshd[20198]: User root from 222.73.37.31 not allowed because not listed in AllowUsers |
sshd 접속하는 root 접속 요청을 찾으려면,
1 | awk '/sshd|root/' /var/log/auth.log # sshd,root 가 있는 줄을 출력 |
찾은 결과의 특정 컬럼만 출력 가능하다:
1 | $ awk '/sshd|Failed/ {print $13}' /var/log/auth.log |
1 | $ awk '{print "Number of fields: " NF}' /var/log/auth.log |
로그인 실패한 root 사용자가 사용하는 IP만을 추출하고자 한다면,
Apr 16 06:43:07 homepi sshd[20198]: Failed password for invalid user root from 222.73.37.31 port 41030 ssh2
1 | $ awk '/Failed password/ {print $13,":",$15 }' /var/log/auth.log |
위 결과를 정렬하면, 같은 IP들이 징렬되어 나열된다.
1 | awk '/Failed password/ {print $13,":",$15 }' /var/log/auth.log | sort ``` |
1 | awk '/^north/' datafile # north로 시작하는 줄 출력 |
auth.log 에 있는 잘못된 로그인 정보만 출력
1 | awk '(/sshd|invalid/){print $(NF-5)}' /var/log/auth.log |
연산자
| 연산자 | 설명 |
| —————– | ———————————— | —- | ———— | — | ———————— |
| = += -= *= /= %= | 배정(assignment)연산자 |
| + - * / % ++ – | 산술 연산자 |
| | | && ! | 논리 연산자( | | = OR, && = AND, ! = NOT) |
| >>= < <= == != | 비교 연산자 |
| v p | 변수 V가 패턴 P에 부합되면 참 |p | 변수 V가 패턴 P에 부합되지 않으면 참 |
| v !
1 | awk '$7 == 5' datafile : 7번 필드가 5와 같다면 출력 |
액션
awk pattern {action} filenames
① expressions
② print expression-list
③ printf(format, expression-list)
④ if (expression) statement
⑤ if (expression) statement else statement
⑥ while (expression) statement
⑦ for (expression; expression; expression) statement
⑧ for (variable in array) statement
⑨ do statement while (expression)
⑩ break
⑪ continue
⑫ next
⑬ exit
⑭ exit expression
⑮ {statement}