아래와 같은 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 조정하기 꿀팁 (379) | 2019.08.08 |
결혼식 청첩장 Github blog로 세련되게 만들기. 후기! (380) | 2019.06.04 |
Java에서 method작성시 파라미터 개수를 5개미만으로 해야하는 이유?? (270) | 2019.05.03 |