Compter parmis liste d'IP

Résolu/Fermé
Ludo - 29 nov. 2011 à 20:34
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 29 nov. 2011 à 21:01
Bonjour,

voilà j'ai un fichier texte qui comporte une liste d'adresses IP,
ce sont les connexions enregistrées, cependant, la même IP peut se répéter (si elle s'est connecté plusieurs fois).
Je voudrais connaître le nombre total d'IP qui s'est connecté (donc qui se trouve dans mon fichier) sans compter les doubles.
Comment puis-je réaliser un script qui exécute ce compte ?
Je sais qu'il faut utiliser grep, mais comment faire pour ne compter qu'une seule fois les IP qui s'y trouvent plusieurs fois ?

Merci de vos réponses, bonne journée.

1 réponse

mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 805
Modifié par mamiemando le 29/11/2011 à 21:03
Un truc dans ce genre devrait faire l'affaire :

egrep -o "[0-9]{1,3}([.][0-9]{1,3}){3}" toto.txt  | sort | uniq | wc -l


Exemple : (qui permettra d'expliquer la commande)

(mando@aldur) (~) $ cat toto.txt  
192.168.1.1 coucou1 
coucou2 192.168.1.2 
coucou3 192.168.1.1 coucou3 

(mando@aldur) (~) $ egrep -o "[0-9]{1,3}([.][0-9]{1,3}){3}" toto.txt  
192.168.1.1 
192.168.1.2 
192.168.1.1 

(mando@aldur) (~) $ egrep -o "[0-9]{1,3}([.][0-9]{1,3}){3}" toto.txt  | uniq 
192.168.1.1 
192.168.1.2 
192.168.1.1 

(mando@aldur) (~) $ egrep -o "[0-9]{1,3}([.][0-9]{1,3}){3}" toto.txt  | sort | uniq 
192.168.1.1 
192.168.1.2 

(mando@aldur) (~) $ egrep -o "[0-9]{1,3}([.][0-9]{1,3}){3}" toto.txt  | sort | uniq | wc -l 
2


Le "sort" est nécessaire car "uniq" ne supprime que les répétitions consécutives. Note que si plusieurs IP sont sur la même ligne, ça continue à marcher car "egrep -o" écrira une IP par ligne.

Bonne chance
2