Si bien las herramientas anteriores son geniales, creo que sé lo que preguntaba el interrogador. A menudo me duele que no pueda extraer la información de un registro de acceso de la misma manera que puedo con otros archivos.
Se debe al formato de registro de acceso tonto:
127.0.0.1 - - [16/Aug/2014:20:47:29 +0100] "GET /manual/elisp/index.html HTTP/1.1" 200 37230 "http://testlocalhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"
¿Por qué usaron [] para la fecha y "" para otras cosas? ¿Pensaron que no sabríamos que había una cita en el campo 4? Es increíblemente frustrante.
La mejor herramienta en este momento para esto es gawk:
gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'
en los datos anteriores esto te daría:
"GET /manual/elisp/index.html HTTP/1.1"
En otras palabras, el FPAT le brinda la capacidad de extraer los campos del registro de apache como si fueran campos reales en lugar de solo entidades separadas por espacios. Esto es siempre lo que quiero. Entonces puedo analizar eso un poco más con una tubería.
El funcionamiento del FSPAT se define aquí: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
Por lo tanto, puede configurar un alias para crear un gawk que pueda analizar registros de apache:
alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' "
apacheawk '$6 ~ /200/ { print $5 } | sort | uniq
hizo esto para mí:
"GET / HTTP/1.1"
"GET /manual/elisp/index.html HTTP/1.1"
"GET /manual/elisp/Index.html HTTP/1.1"
"GET /scripts/app.js HTTP/1.1"
"GET /style.css HTTP/1.1"
y, por supuesto, casi cualquier otra cosa ahora es posible.
¡Disfrutar!