Tableau à plusieurs colonnes [Résolu] - Shell/Batch - Programmation
Marsh Posté le 11-04-2013 à 14:06:51
Bon, j'ai réussi à faire deux colonnes, mais je n'ai pas l'impression que ce soit un tableau. En fait, j'ai repris le code précédent en le modifiant un peu:
Code :
|
quand je fais un "cat test3":
Citation : |
Mais si je fais un "cp test3 test3.csv", mes lignes sont de la forme:
Citation : |
Est-ce qu'il y a moyen de faire à partir de cela un autre tableau avec comme délimiteur le "->" ? Si oui, quelle est cette commande ?
Marsh Posté le 11-04-2013 à 15:52:19
première remarque en passant :
Code :
|
C'est vraiment pas terrible ca créé un fork inutile. Privilégie plutôt un :
Code :
|
En ce qui concerne ton problème, je pense que le awk est tout indiqué. Si j'ai bien compris, ce que tu veux faire c'est associer le dernier champ de la ligne qui contient ifIndex avec le dernier champ de la ligne suivante qui contient snmpModules.
Si c'est bien ca, une commande dans le genre suivante devrait fonctionner :
Code :
|
Marsh Posté le 12-04-2013 à 08:20:03
Etant un peu un noob de bash, j'imagine que c'est à cause du pipe qu'il y a de la bouffe de ressource.
Tu as exactement compris mon problème, je vais tenter ça. J'avais entendu parler de la commande "awk" mais j'avais lu de la doc dessus mais cela m'avait l'air assez incompréhensible
Une petite question sur ton code, quand tu utilises le "~", c'est pour annoncer que $3 est une variable ?
En tout cas, je te remercie pour ton aide nukolau, je test ça et dès validation, ce sera un Résolu grâce à toi
Marsh Posté le 12-04-2013 à 09:46:52
oui la doc awk peux semble incompréhensible car en fait awk est un langage de programmation à lui tout seul
Pour faire simple :
-F'' : indique a awk qu'on va découper les lignes sur les caractères : et [espace]. Ainsi awk placera dans $1 tout ce qu'il y a avant le premier : ou espace, dans $2 le champ suivant etc.
$3 ~ /xxxx/ : expression régulière qui permet de tester le 3eme champ de la ligne. Ainsi, si on trouve quelque chose qui contient ifIndex, on stockera dans la variable PORT le dernier champ de la ligne (traduit en awk par $NF) et si on trouve un snmpModules on affichera sur la sortie "PORT;$NF"
Marsh Posté le 22-04-2013 à 10:52:58
Je ne sais pas si cela se fait, mais j'ai enlevé le "[Résolu]" pour une autre aide concernant à peu près au même problème.
Alors, j'ai un fichier qui contient les lignes suivantes:
Citation : |
Ce que je souhaiterais avoir, c'est cela:
Citation : |
J'ai tenté par la commande "awk" mais je n'arrive à récupérer que l'adresse IP (qui d'ailleurs était séparée par des espaces et non des points, mais que j'ai rectifié avec la commande sed).
J'ai alors tenté la commande
Code :
|
. Le résultat est le suivant:
Citation : |
Du coup, je ne sais pas ce qu'il faut changer ou ajouter dans mon printf pour que cela fonctionne.
Marsh Posté le 22-04-2013 à 11:08:11
En fait, c'est bon j'ai trouvé, voici mon code:
Code :
|
Et bim, voilà ce que cela me sort:
Citation : 17;192.168.0.8 |
Marsh Posté le 22-04-2013 à 11:17:08
En espérant que les lignes aient toujours le même nombre de groupes.
Marsh Posté le 11-04-2013 à 09:57:51
Bonjour à tous,
Dans le cadre d'un de mes projets, je dois créer un tableau à plusieurs colonnes contenant des variables déjà définies. Je m'explique, le début de mon script est le suivant:
Le fichier /tmp/trap_up est le suivant:
SNMPv2-MIB::sysUpTime.0 0:0:02:02.32
SNMPv2-MIB::snmpTrapOID.0 IF-MIB::linkUp
IF-MIB::ifIndex.17 17
IF-MIB::ifAdminStatus.17 up
IF-MIB::ifOperStatus.17 up
SNMPv2-SMI::snmpModules.18.1.3.0 192.168.0.5
-----------------------------------------------
SNMPv2-MIB::sysUpTime.0 0:0:02:02.32
SNMPv2-MIB::snmpTrapOID.0 IF-MIB::linkUp
IF-MIB::ifIndex.14 14
IF-MIB::ifAdminStatus.14 up
IF-MIB::ifOperStatus.14 up
SNMPv2-SMI::snmpModules.18.1.3.0 192.168.0.5
Donc une fois le script terminé, j'obtiens sur mon terminal:
17 14
192.168.0.5 192.168.0.5
Idéalement, je souhaiterais avoir:
n°port @ip_switch
17 192.168.0.5
14 192.168.0.5
Ainsi, à la vue de ce qu'il y a ci-dessus, je voudrais faire un tableau à deux colonnes mais je ne sais pas trop comment faire, j'ai essayé de passer par une boucle "for", je n'y suis pas arrivé, il ne me ressortait pas ce que je souhaitais, puis j'ai tenté le code "declare -a ARRAY" mais je n'ai pas bien compris la subtilité de cette commande. J'ai aussi pensé à exporter les variables dans un tableau excel, mais étant débutant en Bash, je ne sais pas trop comment m'y prendre.
C'est pour cela que je quémande votre aide, afin que je puisse baisser mon ignorance envers Bash.
Je vous remercie de votre aide,
Message édité par El_Cypriano le 22-04-2013 à 11:08:39