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?

Chèvre mécontente
la source

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
Caleb
la source
3
perl -ne 'if (/ "([^"] +) "$ /) {$ ua {$ 1} ++;} END {for (keys% ua) {print" $ ua {$ _} $ _ \ n "}} '\
  access_log
RedGrittyBrick
la source