• [^] # 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é à 3.

    On peut simplifier.

    Les boucles du style:

    while read line;
    do echo -e ${line:29} >> /scriptsOID/mac1016b.tmp
    done < /scriptsOID/mac1016.tmp;
    
    

    se simplifient en:

    cut -c29- < /scriptsOID/mac1016.tmp > /scriptsOID/mac1016b.tmp
    
    

    La récupération des mac peut se réécrire en remplaçant les fichiers intermédiaires par des pipes:

    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ドル }' > /scriptsOID/mac1016.dat
    
    

    Comme en plus, il faut avoir des listes triées par ordre alphabétique pour join, j'y ajouterais un sort:

    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 > /scriptsOID/mac1016.dat
    
    

    En faisant la même chose pour les fichiers bridge.dat et port.dat, les jointures peuvent se simplifier en:

    #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 > 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 > ./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