2009-11-27 4 views
0

Supposons que je dispose d'un fichier de cinq lignes avec des adresses IP:Comment obtenir le nombre moyen de répétitions d'une ligne dans un fichier?

1.2.3.4 
5.6.7.8 
5.6.7.8 
9.9.9.9 
5.6.7.8 

Je dois trouver le nombre moyen de fois par IP est répétée consécutivement. Dans cet exemple, chaque séquence des mêmes adresses IP a la longueur de 1, à l'exception de 5.6.7.8, qui est répétée deux fois. Donc, pour cet exemple, la réponse est (1 + 2 + 1 + 1)/4 = 1.25. J'essaye de comprendre combien de fois en moyenne les utilisateurs ont cliqué sur le bouton de téléchargement sur mon site Web avant d'abandonner ou se rendre compte qu'ils devraient réagir à l'avertissement d'installation d'addon de Firefox au-dessus de la page. Est-ce que cela peut être fait dans une ligne de commande ou je dois écrire un script pour le faire? Je vais bien écrire un script en rubis mais je me demande si cela peut être fait avec un oneliner intelligent.

+0

les adresses IP sont-elles écrites dans un fichier .txt quelque part? et si oui, dans quel format? – Pieter888

+0

C'est un fichier texte que j'ai créé à partir du fichier access.log d'Apache. Un IP par ligne, 1005 lignes. –

Répondre

2

En shell standard, je le ferais comme ceci:

uniq -c intputfile | awk '{count++;sum+=$1} END{print count,"lines.","Average is:",sum/count}' 
+0

Merci! uniq -c est exactement ce que je ne savais pas –

+0

Très gentil :) +1 – jkp

0

rapide et sale:

echo `cat test.txt | wc -l`/`uniq test.txt | wc -l` | bc -l 

Il est possible que vous devez installer bc premier (pour faire le calcul à virgule flottante).

Questions connexes