Il y avait une erreur dans mon message précédent: les fichiers doivent être triés par ordre alphabétique mais uniquement sur le champ utilisé pour la jointure. Pour être sûr que le tri se fait uniquement sur ce champ et non sur toute la ligne, il faut utiliser l'option -k de sort.
Il y a une erreur dans ton script: portname.sort n'est pas trié alphabétiquement contrairement à ce que son nom laisse supposer; port.dat non plus.
De plus, lorsque les fichiers sont correctement triés, il est inutile de bidouiller avec des cut/fgrep pour la jointure.
Enfin, il est inutile d'utiliser ./ devant le nom d'un fichier. Un nom de fichier qui n'est pas précédé d'un chemin est forcément dans le répertoire courant.
#!/bin/bash
########################################################################
########################################################################
#Recuperation des addresse mac dans un fichier au format decimal et hexa
#creation du fichier mac1016.dat contenant la relation mac hex / mac deci
snmpwalk -v 2c -c public -OX xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.1 | \
cut -c29- | \
awk -F " " '{ print 1,ドル4ドル":"5ドル":"6ドル":"7ドル":"8ドル":"9ドル }' | \
sort -k 1,1 > /scriptsOID/mac1016.dat
#recuperation du portbridge et creation de bridge.dat
snmpwalk -v 2c -c public -Of xxx.xxx.xxx.xxx .1.3.6.1.2.1.17.4.3.1.2 |\
cut -c44- | \
awk -F " " '{ print 1,ドル4ドル }' | \
sort -k 1,1 > /scriptsOID/bridge.dat
#recuperation du portID et creation du fichier portid.dat
snmpwalk -v 2c -c public -Of xxx.xxx.xxx.xxx .1.3.6.1.2.1.17.1.4.1.2 | \
cut -c45- | \
awk -F " " '{ print 4,ドル1ドル }' | \
sort -k 1,1 > /scriptsOID/portid.dat
#recuperation du port et creation de port.dat
snmpwalk -v 2c -c public -Of xxx.xxx.xxx.xxx .1.3.6.1.2.1.31.1.1.1.1 | \
cut -c78- | \
awk -F " " '{ print 1,ドル4ドル }' | \
sort -k 1,1 > /scriptsOID/port.dat
#jointure entre les fichier .dat pour former un fichier unique servant de base de donnee
#jointure de mac1016.dat et port bridge.dat pour former mac16bridge.dat
join -1 1 -2 1 mac1016.dat bridge.dat | \
awk -F " " '{ if (3ドル<49) print 3,ドル 2ドル} ' | \
sort -k 1,1 > mac.sort
#jointure de portid.dat et port.dat pour former portname.dat
join -1 1 -2 1 portid.dat port.dat | \
cut -d ' ' -f 2,3 | \
awk -F " " '{ if (1ドル<49) print 1,ドル 2ドル} ' | \
sort -k 1,1 > portname.sort
#jointure de mac16bridge.dat et portname.dat pour former le fichier final BD.dat
join -1 1 -2 1 mac.sort portname.sort > BD.dat
Avec tes fichiers portname.sort et mac.sort correctement triés:
[^] # Re: Bon autant vous montrez le complet ça vous aidera peut etre
Posté par netsurfeur . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 3.
Il y avait une erreur dans mon message précédent: les fichiers doivent être triés par ordre alphabétique mais uniquement sur le champ utilisé pour la jointure. Pour être sûr que le tri se fait uniquement sur ce champ et non sur toute la ligne, il faut utiliser l'option -k de sort.
Il y a une erreur dans ton script: portname.sort n'est pas trié alphabétiquement contrairement à ce que son nom laisse supposer; port.dat non plus.
De plus, lorsque les fichiers sont correctement triés, il est inutile de bidouiller avec des cut/fgrep pour la jointure.
Enfin, il est inutile d'utiliser ./ devant le nom d'un fichier. Un nom de fichier qui n'est pas précédé d'un chemin est forcément dans le répertoire courant.
Avec tes fichiers portname.sort et mac.sort correctement triés: