비표준 Apache 액세스 로그용 Sed/awk 스크립트(Oracle Weblogic)

비표준 Apache 액세스 로그용 Sed/awk 스크립트(Oracle Weblogic)

sed 스크립팅 능력이 제한되어 있어 도움을 주실 수 있는 분이 계신지 궁금합니다.

다음 형식의 비표준 Apache 액세스 로그가 있습니다.

#Version:   1.0
#Fields:    c-ip date time cs-method cs-uri sc-status time-taken bytes
#Software:  WebLogic
#Start-Date:    2014-07-21  11:21:59

10.000.000.000  2014-07-21  11:22:16    GET /em/skins/login.css 200 0.1 1091
10.000.000.000  2014-07-21  13:55:36    POST    /sbconsole/sbconsole.portal?_nfpb=true&_pageLabel=Projects_ViewProjects&ProjectsPortlet=    200 0.766   519376

내가 함께 혼합한 스크립트는 다음과 같습니다.

sed -i  's/[[:space:]]\+/ /g;s/\([0-9][0-9][0-9][0-9]\)\([0-9][0-9]\)\/\([0-9][0-9]\)/\3-\2-\1/;s:-:/:g' log.access 

하지만 막혔고 액세스 로그에 다음 형식이 표시될 수 있도록 도움을 받고 싶습니다.

10.000.000.000 - - [21/07/2014:11:22:16 +0200] "GET /em/skins/login.css HTTP/1.1" 200 1091
10.000.000.000 - - [21/07/2014:13:55:36 +0200] "POST /sbconsole/sbconsole.portal?_nfpb=true&_pageLabel=Projects_ViewProjects&ProjectsPortlet= HTTP/1.1" 200 519376

참고로...GET/POST를 수행하는 여러 개의 서로 다른 IP가 있습니다.


다음 awk 라인은 내가 원하는 출력을 얻습니다.

awk '!/^#/ && NF{split($2,a,"-"); printf "%s - - [%s/%s/%s:%s] \"%s %s\" %s %s %s\n", $1, a[3], a[2], a[1], $3" +200", $4, $5" HTTP/1.1", $6, $7, $8}' alm_server1_51100_access.log > test.test

모두 Fedoki 덕분입니다.

답변1

좋은 마크업:

awk '!/^#/ && NF
     {
      split($2,a,"-")
      printf "%s - - [%s/%s/%s:%s] \"%s %s\" %s %s\n", $1, a[3], a[2], a[1], $3, $4, $5, $6, $7
     }' file

입력이...로 시작하는 줄인 경우 10.000다음과 같습니다.

$ awk '{printf "%s - - [%s:%s] \"%s %s\" %s %s\n", $1, $2, $3, $4, $5, $6, $7}' file
10.000.000.000 - - [2014-07-21:11:22:16] "GET /em/skins/login.css" 200 0.1
10.000.000.000 - - [2014-07-21:13:55:36] "POST /sbconsole/sbconsole.portal?_nfpb=true&_pageLabel=Projects_ViewProjects&ProjectsPortlet=" 200 0.766

빈 줄과 로 시작하는 줄을 건너뛰려면 #다음을 수행하세요.

awk '!/^#/ && NF{printf "%s - - [%s:%s] \"%s %s\" %s %s\n", $1, $2, $3, $4, $5, $6, $7}' file

두 방법 모두 동일한 printf형식을 사용합니다. 즉, 필드에 필수 따옴표, 대괄호, 대시를 추가합니다.

데이터 형식을 다르게 지정하려면 split()후속 배열의 요소를 사용하고 이동하십시오 a[].

$ awk '!/^#/ && NF{split($2,a,"-"); printf "%s - - [%s/%s/%s:%s] \"%s %s\" %s %s\n", $1, a[3], a[2], a[1], $3, $4, $5, $6, $7}' file
10.000.000.000 - - [21/07/2014:11:22:16] "GET /em/skins/login.css" 200 0.1
10.000.000.000 - - [21/07/2014:13:55:36] "POST /sbconsole/sbconsole.portal?_nfpb=true&_pageLabel=Projects_ViewProjects&ProjectsPortlet=" 200 0.766

관련 정보