• [^] # Re: Bon autant vous montrez le complet ça vous aidera peut etre

    Posté par . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 0.

    Oui avec la commande uniq : ça garde l. J'ai un peu adapté le fichier mac.sort pour l'exemple.

    % cat mac.sort 
    1 00:B0:D0:22:46:16
    2 00:25:B3:0E:64:FE
    12 00:03:BA:12:53:6A
    26 00:03:BA:12:53:6A
    27 00:03:BA:44:91:58
    25 00:60:08:2D:27:28
    28 08:00:20:CE:DB:06
    34 00:60:08:2D:27:28
    40 00:60:08:2D:27:28
    % uniq --skip-fields=1 mac.sort
    1 00:B0:D0:22:46:16
    2 00:25:B3:0E:64:FE
    12 00:03:BA:12:53:6A
    27 00:03:BA:44:91:58
    25 00:60:08:2D:27:28
    28 08:00:20:CE:DB:06
    34 00:60:08:2D:27:28
    
    

    --skip-fields (ou -f) permet d'ignorer le premier champ. Il faut alors que le reste soit identique pour que uniq puisse fonctionner. Si dans le fichier de résultat il y a des adresses mac identiques mais avec des descriptifs différents, il faut combiner plusieurs commandes

    Prenons le fichier suivant

    % cat result
    1 00:B0:D0:22:46:16 Ethernet1/0/1
    2 00:25:B3:0E:64:FE Ethernet1/0/2
    5 00:25:B3:0E:64:FE Ethernet1/0/5
    26 00:03:BA:12:53:6A Ethernet1/0/26
    27 00:03:BA:44:91:58 Ethernet1/0/27
    28 08:00:20:CE:DB:06 Ethernet1/0/28
    30 08:00:20:CE:DB:06 Ethernet1/0/29
    32 00:25:B3:0E:64:FE Ethernet1/0/32
    40 00:60:08:2D:27:28 Ethernet1/0/40
    
    

    On sélectionne les deux premiers champs, on lance le uniq et on s'en sert pour retrouver la ligne complète avec fgrep

    % grep -f <(cut -f1,2 -d\ result | uniq -f1) result
    1 00:B0:D0:22:46:16 Ethernet1/0/1
    2 00:25:B3:0E:64:FE Ethernet1/0/2
    26 00:03:BA:12:53:6A Ethernet1/0/26
    27 00:03:BA:44:91:58 Ethernet1/0/27
    28 08:00:20:CE:DB:06 Ethernet1/0/28
    32 00:25:B3:0E:64:FE Ethernet1/0/32
    40 00:60:08:2D:27:28 Ethernet1/0/40
    
    

    Seule la première occurrence est conservée