
Envoyé par
ripat
Les indices sont précisément les numéros de port.($2 deuxième champ du premier fichier lu par awk).
Levons l'ambiguïté: quand on se trouve dans la deuxième accolade pour le premier fichier, a[$1] utilise pour indice les adresses (00.1F.FF.5H.66) et n'a aucune chance de correspondre.

Envoyé par
ripat
La condition de la deuxième instruction est indispensable.
Elle est inutile. Que la confrontation ait lieu dans l'accolade ou avant l'accolade ne m'empêche pas de dormir.

Envoyé par
ripat
La condition proposée par N_BaH était correcte. Elle pouvait aussi simplement s'écrire a[$1] qui s'évalue à TRUE si cet indice (port) existe dans le premier fichier.
Elle est incorrecte car elle est toujours vraie alors que a[$1] n'est pas toujours vraie. Tu le dis toi-même

Envoyé par
ripat
Sans elle, la deuxième instruction serait inutilement exécutée pour toutes les lignes du premier fichier.
D'accord.

Envoyé par
ripat
Quant à la rapidité d'exécution, tout dépend du contexte et de la taille des fichiers.
On ne peut parler que de la vitesse algorithmique....
Si tu commences à comparer le nombre de lignes, les microprocesseurs, etc, on n'est pas arrivé.
Also, whenever you're doing grep | grep | awk | kitchen | sink, you should just replace it all with one simple awk command.
awk sait tout faire mais il le fait mal. grep ne sait que filtrer mais il le fait bien.
Cf les temps que j'ai indiqué plus haut.
Toutes ces choses étant dites, la méthode awk donnée ici est mauvaise car elle présuppose qu'il n'y a qu'une adresse par port. Ce qui paraît douteux. (L'inverse serait tout aussi douteux)
Partager