Compter parmis liste d'IP

Résolu
Ludo -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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