Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1487 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [AWK] Associer des champs à une variable texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[AWK] Associer des champs à une variable texte

n°1274099
g-ridaz
Steam/XboxLive: Gridaz
Posté le 13-04-2011 à 11:17:20  profilanswer
 

Bonjour à tous,

 


j'écris un script bash pour remplir une BDD MySQL avec des infos d'interfaces de switchs.

 

J'arrive pour l'instant à lister les infos qui m'intérèssent grâce à un petit script awk dans une boucle while:

 

while read line
do

 

    echo $line > temp.txt
     awk -F\| '{for (i=1; i<25; i++) print $i}' temp.txt

 

done < $fichier

 


1/ Déjà premier truc qui me soule un peu, l'utilisation du fichier temp.txt, car je n'arrivais pas à lui mettre en souce une commande (type $(echo $line)). Avez-vous une solution?

 

2/ Sinon j'obtiens donc bien une liste de mes informations qui sort ainsi:

 
Citation :

4227809
GigabitEthernet1/0/24
gigabitEthernet
1522
0
0:1e:c1:c6:f8:d8
down
down
99:0:16:10.55
403635924
3801068358
38997521
23003
34312273
0
2713656531
4227154371
766850125
0
0
0
SNMPv2-SMI::zeroDotZero

 

Du coup j'aimerais mettre ces valeurs dans les champs correspondant de ma BDD (pas forcément directement hein :o). J'imaginais donc les mettres dans une variable numérotée et ensuite faire un traitement dessus. Exemple 1=id_interface, 2=type, etc
Est-il possible de directement le faire dans le awk, en associant les nombres avec les chaines correspondantes? => $i = print $i

 


Je teste encore qques manières de faire le 2nd point, mais j'ai souvent des erreurs ou alors la variable i n'est plus prise en compte :/

 


:jap: pour votre aide

Message cité 1 fois
Message édité par g-ridaz le 13-04-2011 à 11:19:49
mood
Publicité
Posté le 13-04-2011 à 11:17:20  profilanswer
 

n°1274109
roondar
Posté le 13-04-2011 à 12:37:51  profilanswer
 

Citation :

Bonjour à tous,
1/ Déjà premier truc qui me soule un peu, l'utilisation du fichier temp.txt, car je n'arrivais pas à lui mettre en souce une commande (type $(echo $line)). Avez-vous une solution?
echo "$line" |awk ...


 
Sinon tu pourrais mettre un exemple de ton fichier source que tu veux parcourir ligne par ligne ainsi que la structure de ta table sql.

Message cité 1 fois
Message édité par roondar le 13-04-2011 à 12:38:58
n°1274134
g-ridaz
Steam/XboxLive: Gridaz
Posté le 13-04-2011 à 13:54:50  profilanswer
 

roondar a écrit :

Citation :

Bonjour à tous,
1/ Déjà premier truc qui me soule un peu, l'utilisation du fichier temp.txt, car je n'arrivais pas à lui mettre en souce une commande (type $(echo $line)). Avez-vous une solution?
echo "$line" |awk ...

 

Sinon tu pourrais mettre un exemple de ton fichier source que tu veux parcourir ligne par ligne ainsi que la structure de ta table sql.

 


Si ça peut aider why not!

 

Le "fichier" source est un ensemble de fichiers dans un dossier, parcouru avec un for. La structure de la BDD est simple, un "champ" pour chaque champ désiré (donc chaque entre |), les fichiers sources ressemblent à ça (plusieurs dizaines de lignes comme ça):

 
Citation :

4227809|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero


Celui-ci est transformé comme j'ai montré le post précédent par ma commande awk, nickel, sauf que j'aimerais stocker chaque ligne affichée qque part now, la division me va bien en fait. Sauf que plutôt qu'un print $1 je veux un variable=$1 ;)

 

:jap: pour ton aide

 


EDIT: j'ai tenté ça là, autrement pr éviter AWK que je connais peu

 
Citation :

       ## Extraction des donnees interface
        while read line
        do
#               echo $line > temp.txt
#               awk -F\| '{for (i=1; i<25; i++) print $i;}' temp.txt

 

               for i in $(seq 1 25)
                do

 

                       valeur_$i=$(echo $line|cut -f$i -d "|" )

 

               done

 

               echo $valeur_1 $valeur_2

 

       done < $fichier

 

fichier correspond à un fichier interface, contenant donc plein de lignes comme celle citée plus haut, line à une ligne

 

EDIT2: d'ailleurs ça ne marche pas plus pr le moment, tjr un souci pr le stockage dans une variable, je vois bien la donnée mais il me met une erreur

 
Citation :

./interfaceSQL.sh: line 34: valeur_1=4227730: command not found
./interfaceSQL.sh: line 34: valeur_2=Ethernet1/0/14: No such file or directory
./interfaceSQL.sh: line 34: valeur_3=ethernetCsmacd: command not found
./interfaceSQL.sh: line 34: valeur_4=1522: command not found
./interfaceSQL.sh: line 34: valeur_5=0: command not found
./interfaceSQL.sh: line 34: valeur_6=0:1a:c1:c:89:50: command not found
./interfaceSQL.sh: line 34: valeur_7=up: command not found
./interfaceSQL.sh: line 34: valeur_8=down: command not found
./interfaceSQL.sh: line 34: valeur_9=0:0:00:06.04: command not found
./interfaceSQL.sh: line 34: valeur_10=0: command not found
./interfaceSQL.sh: line 34: valeur_11=0: command not found


Message édité par g-ridaz le 13-04-2011 à 14:03:28
n°1274190
g-ridaz
Steam/XboxLive: Gridaz
Posté le 13-04-2011 à 17:14:08  profilanswer
 

Up! :)

n°1274201
roondar
Posté le 13-04-2011 à 17:52:49  profilanswer
 

Pour moi awk sert à rien ici, le script lit les fichiers sources (file*) et les insère directement dans la base de donnée.

 
Spoiler :


grep '.' file*
file:4227809|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:31485|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:1531|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:2260|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:3769|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:13113|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:8499|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:18144|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:16818|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:16628|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file1:12127|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:30011|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:5361|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:11465|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:30437|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:16904|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:29872|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:9908|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:21322|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:20512|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file2:30840|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:21652|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:9999|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:27786|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:13603|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:25006|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:19076|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:16390|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:14592|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:18239|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file3:454|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:311|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:16957|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:1985|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:2572|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:20726|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:15099|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:11071|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:6102|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:31917|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero
file4:27699|GigabitEthernet1/0/24|gigabitEthernet|1522|0|0:1e:c1:c6:f8:d8|down|down|99:0:16:10.55|403635924|3801068358|38997521|23003|34312273|0|2713656531|4227154371|766850125|0|0|0|SNMPv2-SMI::zeroDotZero


Code :
  1. #!/bin/bash
  2. # -*- coding: UTF8 -*-
  3. cat file* |while IFS=\| read champ1 champ2 champ3 champ4 champ5 champ6 champ7 champ8 champ9 champ10 champ11 champ12 champ13 champ14 champ15 champ16 champ17 champ18 champ19 champ20 champ21 champ22
  4. do
  5.     echo "INSERT INTO tableName VALUES ('', '$champ1','$champ2','$champ3', '$champ4', '$champ5', '$champ6', '$champ7', '$champ8', '$champ9', '$champ10', '$champ11', '$champ12', '$champ13', '$champ14', '$champ15', '$champ16', '$champ17', '$champ18', '$champ19', '$champ20','$champ21','$champ22')" | mysql -u hfr -phfr hfr  
  6. done



Message édité par roondar le 13-04-2011 à 17:56:50
n°1274213
g-ridaz
Steam/XboxLive: Gridaz
Posté le 13-04-2011 à 18:53:55  profilanswer
 

Je testerais demain mais ça a l'air pas mal effectivement :jap:

 

Je "connaissais" pas la technique

Citation :

|while IFS=\| read champ1 champ2 ...

Pas bête, finalement les commandes simples permettent de faire bcp de choses.
Faut que je vois ce que donne chaque commande pour bien comprendre. Je vois l'utilité du 'grep . file*' là.

 

Est-ce bien compatible avec le fait que je fais un traitement par fichier (j'extrais la date et le hostname du nom_du_fichier)? Ou ça les met tous à la suite ce qu'on semble voir dans ton exemple.

 

Au pire je passe par ma méthode au départ, car si l'extraction des champ est aussi simple que ta commande le laisse supposer c'est bon. Je m'emmerdais avec un cut dernièrement qui posait problème car je n'arrivais pas à le stocker dans une variable incrémentée.

 

:jap:


Message édité par g-ridaz le 13-04-2011 à 18:55:05
n°1274214
roondar
Posté le 13-04-2011 à 19:04:50  profilanswer
 

le 'grep . file*' servait juste à te montrer le contenu de mes fichiers, il n'a rien à voir avec le script.
Vu que je ne savais pas que tu extrayais la date et le hostname jai fait une bête lecture de tous les fichiers.
Donc tu se serais plus çà :

Code :
  1. #!/bin/bash
  2. # -*- coding: UTF8 -*-
  3. for file in file*.txt
  4. do
  5.     while IFS=\| read champ1 champ2 champ3 champ4 champ5 champ6 champ7 champ8 champ9 champ10 champ11 champ12 champ13 champ14 champ15 champ16 champ17 champ18 champ19 champ20 champ21 champ22
  6.     do
  7.         echo "INSERT INTO tableName VALUES ('', '$champ1','$champ2','$champ3', '$champ4', '$champ5', '$champ6', '$champ7', '$champ8', '$champ9', '$champ10', '$champ11', '$champ12', '$champ13', '$champ14', '$champ15', '$champ16', '$champ17', '$champ18', '$champ19', '$champ20','$champ21','$champ22')" | mysql -u hfr -phfr hfr  
  8.     done < "$file"
  9. done
 

Et sinon par rapport à ton script, ton erreur vient du faire que tu n'entourres  pas tes variables par des guillemets et tu as oublier de mettre un "declare" (d'ailleurs on utilise des tableaux pour çà ^^).


Message édité par roondar le 13-04-2011 à 19:24:48
n°1274216
g-ridaz
Steam/XboxLive: Gridaz
Posté le 13-04-2011 à 19:28:21  profilanswer
 

J'ai testé avec les guillemets ça ne marchait pas non plus car il ne prenait pas la bonne valeur (mais plus d'erreur command machin), à moins d'une autre erreur :o
 
Ok ça me parait nickel merci beaucoup, je teste toussa demain

n°1274273
twocats
Posté le 14-04-2011 à 11:32:11  profilanswer
 

Sinon pour injecter une variable dans awk tu peut faire ça (pas testé) :

while read line
do
     awk -F\| '{for (i=1; i<25; i++) print $i}'<<<"${line}"
done < $fichier


---------------
La réponse est 42
n°1274283
g-ridaz
Steam/XboxLive: Gridaz
Posté le 14-04-2011 à 12:27:20  profilanswer
 

Nickel ta solution roondar, ça marche parfaitemet, merci

 

@twocats, en fait je voulais faire l'inverse: mettre la sortie dans une variable

Message cité 1 fois
Message édité par g-ridaz le 14-04-2011 à 12:28:26
mood
Publicité
Posté le 14-04-2011 à 12:27:20  profilanswer
 

n°1274289
roondar
Posté le 14-04-2011 à 13:22:21  profilanswer
 

g-ridaz a écrit :

Nickel ta solution roondar, ça marche parfaitemet, merci
 
@twocats, en fait je voulais faire l'inverse: mettre la sortie dans une variable


 
De rien  :jap:

n°1274651
g-ridaz
Steam/XboxLive: Gridaz
Posté le 18-04-2011 à 11:09:00  profilanswer
 

J'ai un nouveau souci je cherche à comparer deux chaines de caractères:
 
if ["$ID_VLAN2" != "$ID_VLAN"] malheureusement il me met que la commande n'existe pas :/
 

Citation :

ID_VLAN2=$(sed -n 2p done/$name.*.vlan|cut -c44-|cut -f1 -d "=" ); echo ID_VLAN2=$ID_VLAN2
        if ["$ID_VLAN2" != "$ID_VLAN"]
        then
        vlanDescr=$(cat done/$name.*.vlan|grep "$ID_VLAN" |head -n 1|cut -f4 -d ":" ); echo vlanDescr=$vlanDescr
        vlanIfIndex=$(cat done/$name.*.vlan|grep "$ID_VLAN" |tail -n 1|cut -f4 -d ":" ); echo vlanIfIndex=$vlanIfIndex
        fi
         ;;


 
C'est surement très "moche" encore pour ce que je veux faire, mais j'ai pas vraiment l'xp du bash, du coup je fais comme je peux avec ce qui me vient en tête. J'optimiserais après si je découvre des fonctions/commandes utiles pour ce que je veux...
 

n°1274654
twocats
Posté le 18-04-2011 à 11:31:12  profilanswer
 

Les espaces :

if [ "$ID_VLAN2" != "$ID_VLAN" ]


Et "Useless use of cat" again...


---------------
La réponse est 42
n°1274655
g-ridaz
Steam/XboxLive: Gridaz
Posté le 18-04-2011 à 11:36:18  profilanswer
 

:jap: en fait j'en avais pas mis au départ mais yen a dans la variable, et donc ça doit foutre la merde au moment du remplacement :/

 

:shy: ouais un peu de mal avec le code :( done/.. suffit?? EDIT: Non mais j'imagine grep [] done/...


Message édité par g-ridaz le 18-04-2011 à 11:41:28
n°1274667
g-ridaz
Steam/XboxLive: Gridaz
Posté le 18-04-2011 à 14:12:52  profilanswer
 

J'ai finalement supprimé les espaces pourtant ça ne marche tjr pas :/
 

Citation :

./test.sh: line 25: [37129!=65]: command not found


 
EDIT: faut en rajouter :sweat:
 
EDIT2:  [:cerveau boulay]


Message édité par g-ridaz le 18-04-2011 à 14:14:35
n°1274702
roondar
Posté le 18-04-2011 à 21:12:15  profilanswer
 

Pour des nombres on utilise plutôt l'option "-ne" de test.

Code :
  1. if [ 2 -ne 4 ] ...
  2. fi


Message édité par roondar le 18-04-2011 à 21:13:02
n°1274704
mrbebert
Posté le 18-04-2011 à 21:33:03  profilanswer
 

g-ridaz a écrit :

...
 
while read line
do
 
     echo $line > temp.txt
     awk -F\| '{for (i=1; i<25; i++) print $i}' temp.txt
 
done < $fichier
 
...

Je comprends pas un truc : pourquoi isoler chaque ligne pour la traiter avec awk alors que le principe de awk est justement d'appliquer un traitement sur chaque ligne :??:  
 
Sinon, il me semble que awk reste bien plus pratique pour ce type de traitement, au lieu du shell qui va être bien plus compliqué dès qu'on veut manipuler un peu les données.
Perso, et si j'ai bien compris la question, je ferais quelque chose du genre :

awk -F\| '
BEGIN { print "use la_database"; } # tout traitement initial
{ printf("insert into la_table(champ1, champ2, champ3) values('%s','%s','%s');\n", $1, $2, $3); }
END { print "commit;"; }
' file*.txt

Message cité 1 fois
Message édité par mrbebert le 18-04-2011 à 21:34:06

---------------
Doucement le matin, pas trop vite le soir.
n°1274713
g-ridaz
Steam/XboxLive: Gridaz
Posté le 18-04-2011 à 23:10:18  profilanswer
 

mrbebert a écrit :

Je comprends pas un truc : pourquoi isoler chaque ligne pour la traiter avec awk alors que le principe de awk est justement d'appliquer un traitement sur chaque ligne :??:  
 
Sinon, il me semble que awk reste bien plus pratique pour ce type de traitement, au lieu du shell qui va être bien plus compliqué dès qu'on veut manipuler un peu les données.
Perso, et si j'ai bien compris la question, je ferais quelque chose du genre :

awk -F\| '
BEGIN { print "use la_database"; } # tout traitement initial
{ printf("insert into la_table(champ1, champ2, champ3) values('%s','%s','%s');\n", $1, $2, $3); }
END { print "commit;"; }
' file*.txt



 
 
Parce que je suis très mauvais :o, pas du tout programmeur (formation admin réseau au départ mais spa une excuse) et que je connais pas du tout awk.
 
Le petit souci pour moi c'est que je dois passer de fichiers en fichiers, que les infos doivent se recouper entre les fichiers, donc j'ai pensé à récup des élements entre les deux, et entre tout je m'y perd vachement. Je voudrais pas que HFR me fasse le prog à ma place car je trouve ça intéressant de galérer mais c'est vrai qu'un connaisseur fait ça en deux sec, et en 10 fois moins de lignes :/
 
Je repasserais peut etre expliquer exactement ce que je veux faire demain, en postant les deux fichiers que je dois lire, l'organisation de la BDD et comme ça je profiterais de votre aide précieuse ;)

n°1274714
mrbebert
Posté le 18-04-2011 à 23:22:34  profilanswer
 

Je ne sais pas ce que tu veux dire exactement par "passer de fichiers en fichiers" mais une piste peut être de charger chaque fichier "brut" dans une table temporaire et de générer les données finales par des requêtes SQL. C'est tout de même beaucoup plus pratique que du shell quand on parle de sélections ou de jointures :D


---------------
Doucement le matin, pas trop vite le soir.
n°1274732
g-ridaz
Steam/XboxLive: Gridaz
Posté le 19-04-2011 à 08:28:34  profilanswer
 

mrbebert a écrit :

Je ne sais pas ce que tu veux dire exactement par "passer de fichiers en fichiers" mais une piste peut être de charger chaque fichier "brut" dans une table temporaire et de générer les données finales par des requêtes SQL. C'est tout de même beaucoup plus pratique que du shell quand on parle de sélections ou de jointures :D

 


En fait jai limpression qu'il ya tellement de maniere de faire que je my perd un peu :o

 

Cest une idee a laquelle je navais pas pense mais je pense pas que se soit bien possible. Jexpliquerais plus en detail plus tard dans la matinee. Je peux faire du perl aussi mais alors la je connais encore moins :/

n°1274777
g-ridaz
Steam/XboxLive: Gridaz
Posté le 19-04-2011 à 12:31:18  profilanswer
 

Bon c'est parti!

 

J'ai donc 3 types de fichiers: .sys / .int / .vlan

 

.sys contient plusieurs informations sur le système, dont le type de switch (grâce à un OID qui permet d'identifier les différentes séries)

 

.int contient les informations sur les interfaces, ID_Int typiquement

 

.vlan les infos des vlans, sous la forme OID.ID_Vlan = Vlan Description et OID.ID_Vlan = VlanIfIndex, puis ifStackStatus qui permet de connaitre la correspondance entre Vlan et interfaces

 
Citation :

SNMPv2-SMI::enterprises.43.10.1.14.1.2.1.2.65 = STRING: "Default VLAN"
SNMPv2-SMI::enterprises.43.10.1.14.1.2.1.2.31259 = STRING: "EXEMPLE"
SNMPv2-SMI::enterprises.43.10.1.14.1.2.1.4.65 = INTEGER: 1
SNMPv2-SMI::enterprises.43.10.1.14.1.2.1.4.31259 = INTEGER: 2000
IF-MIB::ifStackStatus.65.101 = INTEGER: active(1)
IF-MIB::ifStackStatus.65.102 = INTEGER: active(1)
IF-MIB::ifStackStatus.31259.108 = INTEGER: active(1)
IF-MIB::ifStackStatus.31259.48723 = INTEGER: active(1)
                                   |       |
                                id_vlan  id_interface

 


Objectifs
Je cherche donc à lister les vlan dans la BDD, puis d'y associer dans une table d'asso les interfaces sur lesquels chacun d'entre eux se retrouve.

 

Tables SQL

 

VLAN --
id_vlan | vlanIfIndex | vlanDescr

 

l_interface_vlan --
id_interface | vlanIfIndex

 

interface --
id_interface | id_host | ...

 


EDIT: ce que je fais marche btw (en tous cas pour une version de "l'IOS" )


Message édité par g-ridaz le 19-04-2011 à 14:40:34
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [AWK] Associer des champs à une variable texte

 

Sujets relatifs
Découper du texte dans un fichier[Bash] Modifier une partie d'une variable mais pas tout !!
[bash] tester si une variable (multivaluée) est vide[AWK] Recherche sur une RegExp
[BASH] Récupérer un morceau de variable...Crée une variable d'environnement permanentes
shell : ne pas interpreter le $ comme une variableComment fixer une variable shell pour tout le monde
script pour déplacer des fichiers listés dans un fichier texteDécalration de variable
Plus de sujets relatifs à : [AWK] Associer des champs à une variable texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR