apache 로그 분석중 - ip 와 날짜출력, 중복제거
글쓴이: maindb / 작성시간: 수, 2005/08/24 - 11:24오전
apache 의 access_log 파일분석중
'test.html' 이라는 문자열이 들어간 부분의
ip 와 날짜만 출력하고 싶습니다. 물론 ip 중복은 제외 하구요.
egrep 'test.html' access_log | awk '{print $1}' | sort -u
위와 같이 하면 되긴 되는데 날짜가 빠지네요.
그래서 awk '{print $1}' 부분에 예를들어
'{print $1 $2 $4 $5}' 와 같이 바꿔보면 이상하게
통계숫자가 틀려집니다. ip 는 같은데 시간이 다를경우도
포함되므로 더 많아지겠죠... 결국 중복 ip 가 포함이 되는것이죠.
어떻게 하면 제가 원하는 결과를 정확히 얻을 수 있을까요?
조언부탁드립니다.
감사합니다.
Forums:
Re: apache 로그 분석중 - ip 와 날짜출력, 중복제거
뭐가 "정확한 결과" 입니까? :-) 어떤 결과를 원하시는지, 질문만으로는 알 수 없군요. 특정 페이지를 본 IP를 알고 싶은데 그 IP에서 여러번 봤다면 마지막 본 것이 필요하신가요? 아니면 최초 본 시간이 알고싶으신가요? 어쨌든,
sort 명령의 메뉴얼에서 -k 옵션의 설명을 확인해보시면 뭔가 원하시는 것과 비슷한 것을 찾으실 수 있을지도 모르겠습니다.
하시려는 일에 따라서... 조금 긴 스크립트가 필요할지도 모르겠다는 생각도 드는군요.
--
"The love you take is equal to the love you make." The End, by Beatles
Re: apache 로그 분석중 - ip 와 날짜출력, 중복제거
아.. 제가 설명을 좀 이상하게나 드렸나 보군요.
'test.html' 이라는 문자열이 들어간 부분의
ip 와 날짜만 리스트출력
조건 : ip 중복 제외
원하는 결과는 위와 같습니다.
예를들어 아래의 코드는 제가 원하는 결과에서
날짜가 출력되지 않습니다.
egrep 'test.html' access_log | awk '{print $1}' | sort -u
다시한번 조언 부탁드릴께요 ^^
Re: apache 로그 분석중 - ip 와 날짜출력, 중복제거
질문 참... 애매모호하군요!
IP_1 - DATE_1
IP_1 - DATE_2
IP_2 - DATE_3
IP_3 - DATE_4
위와 같은 결과가 있다면... 원하는 출력이 무엇인지요???
IP_1 - DATE_1
IP_2 - DATE_3
IP_3 - DATE_4
-----------------
IP_1 - DATE_2
IP_2 - DATE_3
IP_3 - DATE_4
----------------
IP_1 - DATE_1
___ - DATE_2
IP_2 - DATE_3
IP_3 - DATE_4
Re: apache 로그 분석중 - ip 와 날짜출력, 중복제거
ip 와 날짜 가 같이 출력 되는데
ip 중복만 제외하면
날짜값은 어떻게 해야하나요?
위 손님분 말씀대로
하나의 ip가 두번 접속했을때
'ip 중복 제외' 라는건 날짜를 출력 안하신다것 인데..
쩝..
예제 자료와 예상 출력등을 같이 올려 주시면
원하시는 답변을 얻을수 있을것 같습니다.
언제나 시작
웃.. 죄송합니다..스무고개를 원하는것은 아닌데 그렇게 되어버렸네요.
웃.. 죄송합니다..
스무고개를 원하는것은 아닌데 그렇게 되어버렸네요.
egrep 'test.html' access_log.1 | awk '{print $1 $2 $4 $5}' | sort -u
위와 같이 입력하면 아래와 같은 출력결과를 얻을 수 있습니다.
하지만... 아래 결과에서 같은 ip 는 제외 시킨 결과값을 얻고 싶습니다.
이제서야 제가 원하는 것을 정확히 설명(?) 한것 같군요...
61.102.76.74-[24/Aug/2005:00:58:33+0900]
61.103.165.136-[24/Aug/2005:01:55:59+0900]
61.103.24.162-[23/Aug/2005:23:23:35+0900]
61.103.24.162-[23/Aug/2005:23:24:07+0900]
61.104.3.64-[24/Aug/2005:02:00:28+0900]
61.104.81.45-[23/Aug/2005:21:17:35+0900]
61.106.212.209-[24/Aug/2005:01:28:39+0900]
61.109.77.208-[23/Aug/2005:21:57:28+0900]
61.110.226.98-[24/Aug/2005:00:26:12+0900]
61.248.164.250-[23/Aug/2005:21:30:42+0900]
61.248.164.250-[23/Aug/2005:21:38:51+0900]
61.248.164.250-[23/Aug/2005:22:29:15+0900]
61.248.222.62-[23/Aug/2005:22:43:51+0900]
61.249.152.25-[23/Aug/2005:22:52:22+0900]
61.249.185.10-[23/Aug/2005:23:52:24+0900]
61.249.56.136-[23/Aug/2005:22:16:10+0900]
grep 'test.html' | awk '{print $1,$4}' |
grep 'test.html' | awk '{print $1,$4}' | sort -k 1 |uniq -f 2
(awk로 ip와 날짜만 잡아오는 경우)
질문의 의도로는, 날짜가 어떻다고 해도 상관 없다는 뜻 같군요.
man uniq 해보세요. (uniq -f 2는 날짜 필드는 skip한다는 뜻)
[quote="Anonymous"]grep 'test.html' | aw
egrep 'test.html' access_log.1 | awk '{print $1,$4}'| sort -k 1 | uniq -f 2
한줄만 출력이 되네요.
눈으로 봐도 여러개 인데 ^^;
감사합니다...덕분에 해결했습니다.egrep 'test.htm
감사합니다...
덕분에 해결했습니다.
egrep 'test.html' access_log.1 | awk '{print $1,$4}'| sort -u -k1,1
위와 같이 해서 원하는 결과를 얻었습니다.
댓글 달기