Comment extraire les chaînes de l'agent utilisateur d'un fichier journal?


12

Actuellement, j'exécute une commande comme celle-ci, pour obtenir le contenu le plus demandé:

grep "17\/Jul\/2011" other_vhosts_access.log | awk '{print $8}' | sort | uniq -c | sort -nr

Je veux maintenant voir les chaînes d'agent utilisateur, mais le problème est qu'elles incluent plusieurs espaces. Voici une ligne de fichier journal typique. L'UA est la dernière section délimitée par des guillemets:

example.com:80 [ip] - - [17/Jul/2011:23:59:59 +0100] "GET [url] HTTP/1.1" 200 6449 "[referer]" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30"

Existe-t-il un meilleur outil que awk pour cela?

Réponses:


19

Si ce format est cohérent et que le champ est vraiment entouré de guillemets doubles, vous pouvez utiliser awk ou cut with "comme délimiteur de champ:

awk -F\" '{print $6}'

ou:

cut -d\" -f 6

3
perl -ne 'if (/ "([^"] +) "$ /) {$ ua {$ 1} ++;} END {for (keys% ua) {print" $ ua {$ _} $ _ \ n "}} '\
  access_log
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.