Une nouvelle question sur le même exemple de script, je me demandé si dans le fichier résulté il était possible de supprimer les ligne ayant un champ commun (exemple adresse mac) en respectant leur ordre d'arrivé dans le fichier.
#!/bin/bash
########################################################################
#Recuperation des addresse mac dans un fichier au format decimal et hexa
snmpwalk -v 2c -c public -OX xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.1 > /scriptsOID/mac1016.tmp
#creation du fichier mac1016.dat contenant la relation mac hex / mac deci
while read line;
do echo -e ${line:29} >> /scriptsOID/mac1016b.tmp
done < /scriptsOID/mac1016.tmp;
awk -F " " '{ print $1,$4":"$5":"$6":"$7":"$8":"$9 }' /scriptsOID/mac1016b.tmp >> /scriptsOID/mac1016.dat
#recuperation du portbridge
snmpwalk -v 2c -c public -Of xxx.xxx.xxx.xxx .1.3.6.1.2.1.17.4.3.1.2 > /scriptsOID/bridge.tmp
#creation du fichier bridge.dat
while read line;
do echo -e ${line:44} >> /scriptsOID/bridgeb.tmp
done < /scriptsOID/bridge.tmp
awk -F " " '{ print $1,$4 }' /scriptsOID/bridgeb.tmp >> /scriptsOID/bridge.dat
#recuperation du portID**
snmpwalk -v 2c -c public -Of xxx.xxx.xxx.xxx .1.3.6.1.2.1.17.1.4.1.2 > /scriptsOID/portid.tmp
#creation du fichier portid.dat
while read line;
do echo -e ${line:44} >> /scriptsOID/portidb.tmp
done < /scriptsOID/portid.tmp
awk -F " " '{ print $4,$1 }' /scriptsOID/portidb.tmp >> /scriptsOID/portid.dat
#recuperation du port
snmpwalk -v 2c -c public -Of xxx.xxx.xxx.xxx .1.3.6.1.2.1.31.1.1.1.1 >> port.tmp
#creation du fichier port.dat
while read line;
do echo -e ${line:77} >> /scriptsOID/portb.tmp
done < /scriptsOID/port.tmp
awk -F " " '{ print $1,$4 }' /scriptsOID/portb.tmp >> /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 <(fgrep -f <(cut -d ' ' -f 1 ./mac1016.dat) bridge.dat)> mac16bridge.dat
awk -F " " '{ if ($3<49) print $3, $2} ' ./mac16bridge.dat > ./mac16bridge.tmp
sort mac16bridge.tmp > mac.sort
#jointure de portid.dat et port.dat pour former portname.dat
join -1 1 -2 1 ./portid.dat <(fgrep -f <(cut -d ' ' -f 1 ./portid.dat) port.dat)> portname.dat
cut -d ' ' -f 2,3 ./portname.dat >portname.tmp
awk -F " " '{ if ($1<49) print $1, $2} ' ./portname.tmp > ./portname.tmp2
sort ./portname.tmp2 > ./portname.sort
#jointure de mac16bridge.dat et portname.dat pour former le fichier final BD.dat
join -1 1 -2 1 ./mac.sort <(fgrep -f <(cut -d ' ' -f 1 ./mac.sort) portname.sort)> BD.dat
Pour le moment mon scripts ressemble à ça il sert a récupéré en SNMP les info d'un switch et à établir un tableau sous la forme :
Adresse mac port ip du switch
Mais la jointure me pose toujours problème.
Mon scripts n'est pas très beau mais c'est plutôt nouveau tout ça pour moi .
Le truc un eu bizarre c'est que j'ai fait plusieurs jointures avec ta solution cependant une me résiste
file 1:
1 12:15:a5:45
2 17:15:a5:d5
3 12:ab:a5:a5
41 00:15:25:a5
42 18:14:a5:75
après quelque adaptation j'ai réussi a faire fonctionner ta solution merci beaucoup. il me reste 2 ou 3 problèmes a résoudre mais je devrai m'en sortir.
plusieurs tests mais les résultats obtenu ne sont pas concluant, comme si il commencé la jointure au milieu du fichier , je pense que c'est du au fait que les fichiers sont de taille différente et qu'il y a des trous dans mon champ de jointure.
[^] # Re: Bon autant vous montrez le complet ça vous aidera peut etre
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 0.
Une nouvelle question sur le même exemple de script, je me demandé si dans le fichier résulté il était possible de supprimer les ligne ayant un champ commun (exemple adresse mac) en respectant leur ordre d'arrivé dans le fichier.
[^] # ça marche
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 1.
vous êtes vraiment énorme , votre aide est précieuse et me redonne envie de me mettre sérieusement au bash.
ça doit vous semblez anodin mais j'ai beaucoup appris je vous remercie.
Je vais maintenant essayer de dynamiser encore plus le scripts en faisant appelle a un fichier contenant toute les adresse de switch .
merci encore une grosse partie recherche et réflexion m'attend je reviendrai vers vous en cas de problème.
cordialement benofdark.
[^] # Re: Bon autant vous montrez le complet ça vous aidera peut etre
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 1.
Ma dernière jointure est toujours impossible , je cherche activement une solution.
Voici le contenu des 2 fichiers a jointer au cas ou vous auriez une idée.
et le deuxieme :
Merci d'avance
[^] # Re: Bon autant vous montrez le complet ça vous aidera peut etre
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 1.
Merci beaucoup pour ces simplifications j'avoue que c'est beaucoup plus lisible.
je vais tester quelque truc que j'ai trouvé en fin de journée hier et je vous donnerai l'avancement .
Merci pour tout ce temps que vous me consacré.
# Bon autant vous montrez le complet ça vous aidera peut etre
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 0.
Pour le moment mon scripts ressemble à ça il sert a récupéré en SNMP les info d'un switch et à établir un tableau sous la forme :
Adresse mac port ip du switch
Mais la jointure me pose toujours problème.
Mon scripts n'est pas très beau mais c'est plutôt nouveau tout ça pour moi .
[^] # Re: Bizarre bizarre
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 0.
serait il possible dans mes fichiers de remplacer dans le premier champ les 1,2,3,4,5,6,7,8,9 par 01,02,03,04,05,06,07,08,09?
[^] # Re: Bizarre bizarre
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 0.
Une idée, une solution je regarde du coté de awk et des tableaux là !
[^] # Re: Bizarre bizarre
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 1.
je ne peut donc pas faire de jointure comme précédemment ?
# Bizarre bizarre
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 1.
Le truc un eu bizarre c'est que j'ai fait plusieurs jointures avec ta solution cependant une me résiste
file 1:
1 12:15:a5:45
2 17:15:a5:d5
3 12:ab:a5:a5
41 00:15:25:a5
42 18:14:a5:75
file 2
1 eth1
2 eth10
3 eth5
4 eth6
5 eth22
…
40 eth8
41 eth17
42 eth9
43 eth11
une fois de plus il me dit que file 1 n'est pas trié, est ce a cause des trou ?
[^] # Re: Avec join un brin de fgrep et un soupçon de cut
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 1.
après quelque adaptation j'ai réussi a faire fonctionner ta solution merci beaucoup. il me reste 2 ou 3 problèmes a résoudre mais je devrai m'en sortir.
[^] # Re: Avec join un brin de fgrep et un soupçon de cut
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 0.
j'ai tester en ajoutant a mon script un sort -r sur chacun de mes chier sur le champ de la jointure, mais le résultat est toujours le même .
[^] # Re: Avec join un brin de fgrep et un soupçon de cut
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 0.
j'obtient
join: file 2 is not in sorted order
join: file 1 is not in sorted order
je ne comprend pas vraiment d'ou vient le probleme.
[^] # Re: join
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 0.
j'ai testé
join -1 2 -2 1 -o 1.1 2.2 -i --nocheck-order fichier1 fichier 2
résultat :
4 Chantal
5 Daniel
[^] # Re: join
Posté par benofdark . En réponse au message Utilisation de awk pour la jointure de 2 fichiers. Évalué à 0.
plusieurs tests mais les résultats obtenu ne sont pas concluant, comme si il commencé la jointure au milieu du fichier , je pense que c'est du au fait que les fichiers sont de taille différente et qu'il y a des trous dans mon champ de jointure.