
아래와 같은 apache access log가 존재한다고 가정하자
테스트 데이터
127.0.0.1 - - [10/Feb/2019:11:11:55 +0000] "GET / HTTP/1.1"
10.10.30.3 - - [10/Oct/2018:13:55:36 -0700] "GET /apache_pb.gif"
10.10.30.2 - - [10/Oct/2019:13:55:36 -0100] "GET /two.html"
...
...
상기 apache access log 중 log 앞에 있는 access ip를 뽑아서 top 10을 script로 뽑으려면 어떻게 해야할까?
1. cat과 awk로 ip만 추출
명령어
$ cat test_apache_log.txt|awk '{print $1}'
cat과 awk를 통해 아래와 같이 ip만 추출가능하다
결과물
10.20.10.1
10.20.10.5
10.20.10.4
10.20.10.5
10.20.10.4
10.20.10.5
10.20.10.4
10.20.30.6
10.20.30.3
10.20.30.6
10.20.30.3
10.20.30.6
10.10.1.4
10.10.55.2
127.0.0.1
10.10.30.3
10.10.30.6
...
...
2. sort와 uniq 로 각 값의 개수 추출
명령어
$ cat test_apache_log.txt|awk '{print $1}'|sort -n | uniq -c
uniq -c는 연속으로 중복된 행을 하나의 행으로 만들어준다. 그러므로 sort -n을 통해 1번에서 추출한 데이터를 소팅하고 uniq -c로 연속된 행을 하나의 행으로 만들고 숫자를 추출 할 수 있다.(연속된 행이 몇개인지)
결과물
11 10.10.1.4
8 10.10.30.2
18 10.10.30.3
10 10.10.30.6
11 10.10.55.2
56 10.20.10.1
80 10.20.10.4
18 10.20.10.5
118 10.20.30.3
118 10.20.30.6
20 127.0.0.1
3. sort 로 개수 정렬
명령어
$ cat test_apache_log.txt|awk '{print $1}'|sort -n | uniq -c | sort -rn
2에서 추출된 결과물을 sort -rn을 통해 내림차순 정렬한다
결과물
118 10.20.30.6
118 10.20.30.3
80 10.20.10.4
56 10.20.10.1
20 127.0.0.1
18 10.20.10.5
18 10.10.30.3
11 10.10.55.2
11 10.10.1.4
10 10.10.30.6
8 10.10.30.2
4. head 로 상위 top 10 추출
명령어
$ cat test_apache_log.txt|awk '{print $1}'|sort -n | uniq -c | sort -rn | head -n 10
3에서 추출된 결과물에서 head -n을 통해 상위 n개의 행을 출력한다
결과물
118 10.20.30.6
118 10.20.30.3
80 10.20.10.4
56 10.20.10.1
20 127.0.0.1
18 10.20.10.5
18 10.10.30.3
11 10.10.55.2
11 10.10.1.4
10 10.10.30.6
End of Document
'개발이야기' 카테고리의 다른 글
| Udacity 데이터 스트리밍 강의 후기- Apache Kafka (0) | 2019.11.18 |
|---|---|
| TED 자막으로 영어 공부 - 웨일확장앱 (0) | 2019.11.15 |
| [Python서버] Django vs Flask (0) | 2019.10.10 |
| Intellij에서 줄바꿈 간격 화면에 맞게 custom 조정하기 꿀팁 (1) | 2019.08.08 |
| 결혼식 청첩장 Github blog로 세련되게 만들기. 후기! (5) | 2019.06.04 |
| Java에서 method작성시 파라미터 개수를 5개미만으로 해야하는 이유?? (0) | 2019.05.03 |