Forum Linux.débutant table output

Posté par  . Licence CC By‑SA.
-4
24
avr.
2015

i have this code in shell but i want an output in a table anyone can help?

#!/bin/bash
Rep_Scripts='/home/scripts'
out_file='/home/scripts/out_file'
rm -rf $Rep_Scripts/out_file

for i in `cat $Rep_Scripts/IP_ALU_LIST.txt | awk '{print}'`
do
read hostname ip <<< $(echo $i |sed 's/;/ /')


        echo "${hostname} ==> ${ip} If_Name" >> out_file
        snmpwalk -v2c -c ${ip} OID>> out_file
        echo "${hostname} ==> ${ip} Global_If_Index" >> out_file
         snmpwalk -v2c -c ${ip} OID >>  out_file
        echo "${hostname} ==> ${ip} If_Statut" >> out_file
        snmpwalk -v2c -c  ${ip} OID >> out_file


done

output i have

    Routeur 2 ==> 89.89.156.112 If_Name
    :vRtrIfName.1.1
    :vRtrIfName.1.2
    Routeur 2 ==> 89.89.156.112 If_index
    546
    789
    Routeur 2 ==> 89.89.156.112 If_status
    1
    2

output i want :

    routerName  IPadd          If_Name           If_index    If_status

    Routeur 2   89.89.156.112 :vRtrIfName.1.1    546         1
    Routeur 2   89.89.156.112 :vRtrIfName.1.2    789         2
  • # Mettre des tabulations ?

    Posté par  . Évalué à 3.

    $ echo -e "toto\ttiti\ttata\n"
    toto    titi    tata
    
  • # Pour compléter mon premier message

    Posté par  . Évalué à 2. Dernière modification le 24 avril 2015 à 21:38.

    echo "${hostname} ==> ${ip} If_Name" >> out_file
    snmpwalk -v2c -c ${ip} OID>> out_file

    En faisant ça tu vas forcément avoir un retour à la ligne entre la sortie de ton echo et la sortie de ton snmpwalk.

    Pour avoir tout sur la même ligne il faut (à ma connaissance) passer par une variable. Pas testé mais ça devrait ressembler (grosso modo) à ça :

    premiere_colonne=$(echo -e "${hostname}\t${ip}") // les deux premières colonnes en fait…
    deuxieme_colonne=$(snmpwalk -v2c -c ${ip} OID)   // la troisième colonne…
    echo -e "$premiere_colonne\t$deuxieme_colonne" >> out_file

    et caetera…

    Il y a quand même un truc qui me chagrine dans ton exemple, les trois commandes snmpwalk sont identiques ?! Je suppose que dans le vrai script OID est à remplacer par l'OID désiré, qui n'est donc pas le même à chaque fois ?

    Pas de snmpwalk ici, peux pas vérifier…

    • [^] # Re: Pour compléter mon premier message

      Posté par  . Évalué à 2. Dernière modification le 24 avril 2015 à 21:45.

      echo "${hostname} ==> ${ip} If_Name" >> out_file
      snmpwalk -v2c -c ${ip} OID>> out_file

      En faisant ça tu vas forcément avoir un retour à la ligne entre la sortie de ton echo et la sortie de ton snmpwalk. (you'll get a line return between the output of echo and the output of snmpwalk)

      Pour avoir tout sur la même ligne il faut (à ma connaissance) passer par une variable. Pas testé mais ça devrait ressembler (grosso modo) à ça (if you want only one line, didn't test) :

      premiere_colonne=$(echo -e "${hostname}\t${ip}") // les deux premières colonnes en fait…
      deuxieme_colonne=$(snmpwalk -v2c -c ${ip} OID)   // la troisième colonne…
      echo -e "$premiere_colonne\t$deuxieme_colonne" >> out_file

      et caetera…

      Il y a quand même un truc qui me chagrine dans ton exemple, les trois commandes snmpwalk sont identiques ?! Je suppose que dans le vrai script OID est à remplacer par l'OID désiré, qui n'est donc pas le même à chaque fois ?

      There is something I don't understand in your example, all three snmpwalk commands are the same ?! I guess for each one OID should equal the needed OID ?

      Pas de snmpwalk ici, peux pas vérifier… (snmpwalk not installed here, cannot check)

      Good luck

      PS : French is mandatory on this website ;)

    • [^] # Re: Pour compléter mon premier message

      Posté par  . Évalué à 3.

      et dans son cas il peut le faire en 3 variables et un echo:

      $name=$(snmpwalk option1 pour avoir le name)
      $index=$(snmpwalk  option2 pour avoir index)
      $status=$(snmpwalk option3 pour avoir etat)
      
      echo "${hostname}\t${IP}\t${name}\t${index}\t${status}"
      • [^] # Re: Pour compléter mon premier message

        Posté par  . Évalué à 2. Dernière modification le 24 avril 2015 à 22:57.

        Mais pourquoi faire simple ! ;) Par contre, sans l'option -e de echo ça va pas marcher :)

        • [^] # Re: Pour compléter mon premier message

          Posté par  . Évalué à 2.

          une version qui fonctionne ici :

          name=$(snmpwalk option1 pour avoir le name)
          index=$(snmpwalk  option2 pour avoir index)
          status=$(snmpwalk option3 pour avoir etat)
          
          echo "${hostname}\t${IP}\t${name}\t${index}\t${status}"
          • [^] # Re: Pour compléter mon premier message

            Posté par  . Évalué à 3.

            stef@medusa:~$ cat test.sh 
            #!/bin/dash
            
            toto="toto"
            titi="titi"
            
            echo "${toto}\t${titi}"
            
            
            stef@medusa:~$ ./test.sh 
            toto    titi
            stef@medusa:~$ nano test.sh 
            stef@medusa:~$ cat test.sh 
            #!/bin/bash
            
            toto="toto"
            titi="titi"
            
            echo "${toto}\t${titi}"
            
            
            stef@medusa:~$ ./test.sh 
            toto\ttiti
            

            Intéressant. L'option -e de echo est donc nécessaire seulement avec bash… Tu m'as appris un truc là, merci :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.