Mentre gli strumenti sopra sono tutti fantastici, penso di sapere cosa chiedeva l'interrogante. Mi fa spesso male non riuscire a estrarre le informazioni da un registro di accesso come posso fare con altri file.
È a causa del formato di registro di accesso stupido:
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"
Perché hanno usato [] per la data e "" per altre cose? pensavano che non avremmo saputo che un appuntamento era nel campo 4? È incredibilmente frustrante.
Lo strumento migliore in questo momento è gawk:
gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'
sui dati sopra questo ti darebbe:
"GET /manual/elisp/index.html HTTP/1.1"
In altre parole, FPAT ti dà la possibilità di estrarre i campi del log di apache come se fossero campi effettivi anziché solo entità separate da spazio. Questo è sempre quello che voglio. Posso quindi analizzarlo un po 'di più con una pipeline.
Il funzionamento di FSPAT è definito qui: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
È quindi possibile impostare un alias per creare un gawk in grado di analizzare i log di apache:
alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' "
apacheawk '$6 ~ /200/ { print $5 } | sort | uniq
fatto questo per me:
"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"
e ovviamente quasi tutto il resto è ora possibile.
Godere!