![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: octobre 2007
Messages: 39
|
Bonjour,
GROS problème sur un awk et dites moi au moins que cela est possible car de ce que j'ai trouvé sur le net, rien ne m'indiquait une possibilité ... après je n'ai peut-être pas les termes exact pour effectué ma recherche. Ce que je voudrais faire : Faire passer des paramètres à la commande awk, dont un qui est un tableau. (simplement un tableau simple avec des valeurs) et je voudrais ensuite réutilisé ce tableau pour l'exploité Ce que j'ai fait jusqu'a maintenant Code :
# je rempli mon tableau a longueur variable TAB_KEY[n]
awk ... -v tab=${TAB_KEY[0]} -v nb_idx=${#TAB_KEY[*]}'
{
print tab
}
' monFichier
il me retourne logiquement que le premier résultat du tableaux (index 0) Resultat attendu Je voudrais qu'il me retourne chaque résultat de chaque index pour pouvoir l'exploiter Helllllllllllllllllllp me, pleaaaaaaaaaaaaaaaase j'espère avoir bien expliqué, merci a vous |
|
|
|
|
|
#2 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: octobre 2007
Messages: 39
|
Re,
Autre solution ... peut-être plus simple. ma commande awk se base a partir d'un fichier 1, je voudrais passer en paramètres un fichier où j'irai récupérer les valeurs. Code :
awk -F .... -v fichier_2=/fnnsfn/sdfds/sdf ... '
{
...
}
' fichier_1
Code :
1;2;3 2;2;4 5;2;7 J'espere avoir été clair, pas simple en même temps, demandez moi au pire. RECAPITULATIF : 1- Recuperer 1ere ligne du fichier_2 ex : 1;2;3 2- Recuperer 2 premier champ ex : 1 et 2 3- Concatener ces 2 champs ex : 12 4- Comparer à un champ du fichier_1 5- Si VRAI, recuperer 3eme champ ex : 3 6- Si FAUX, boucler pour la ligne suivante Voila Merci de votre aide |
|
|
|
|
|
#3 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: mars 2007
Localisation: Toulouse
Messages: 471
|
Moi, je ferais comme ça (tableau associatif)
http://www.shellunix.com/awk.html http://lea-linux.org/cached/index/Dev-awk.html fichier_1 : Code :
a;b;c;d;e;f;g;h a;b;c;12;e;f;g;h a;b;c;22;e;f;g;h a;b;c;52;e;f;g;h a;b;c;d;e;f;g;h Code :
1;2;3 2;2;4 5;2;7 Script : Code :
awk -v fichier_2=fichier_2.txt '
function FctChrgt()
{
print "* Chargement du tableau des index"
while (getline Tbuffer < fichier_2 > 0) {
split(Tbuffer,Tab,/;/)
Tind=Tab[1]""Tab[2]
Tval[Tind]=Tab[3]
}
print "* FIN Chargement du tableau des index"
}
BEGIN {
FS=";"
OFS=";"
FctChrgt()
}
{
if (Tval[$4] != "") {
$4=Tval[$4]
}
print $0
} ' fichier_1.txt
Code :
a;b;c;d;e;f;g;h a;b;c;3;e;f;g;h a;b;c;4;e;f;g;h a;b;c;7;e;f;g;h a;b;c;d;e;f;g;h
__________________
Loi de Murphy: La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi. La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi. |
|
|
|
|
|
#4 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: octobre 2007
Messages: 39
|
GRAND merci pour ton aide, ca m'as bien aidé, et j'ai mieux compris comment utilisé l'intérieur d'un awk, malgré je trouve cela pas très habituelle l'utilisation des tableaux ou alors je suis très fatigués. Resultat FINAL : Code :
awk -v ficRef=fichier_2.txt '
function FctChrgt()
{
cpt=0;
# Pour chaque ligne du fichier passé en paramètre du awk
while (getline Tbuffer < ficRef > 0)
{
# Recuperer chaque valeur séparé par ";"
split(Tbuffer,Tab,/;/)
# Mettre ma 1ère valeur recuperer sur 4 caracteres (cadré à gauche avec des espaces à droite)
Tab[1]=sprintf("%-4s",Tab[1]);
# Mettre ma 2ème valeur recuperer sur 1 caractere (cadré à gauche avec des espaces à droite)
Tab[2]=sprintf("%-1s",Tab[2]);
# Concaténer les deux et mettre sa valeur dans le tableaux[n] : formant une clé
tabKey[cpt]=Tab[1]""Tab[2];
# Mettre le resultat correspondant dans le tableaux2[n] : formant le résultat de la clé
tabRes[cpt]=Tab[3];
# Incrementer compteur
cpt++;
}
}
BEGIN {
FS=";"
OFS=";"
FctChrgt()
}
{
# Recuperation et concatenation de 2 valeurs recuperer ultérieurement de fichier_1.txt (pas présent ici)
Var=tabTicket[15]""tabTicket[17];
# Pour chaque valeur du tableau
for (k=0;k<cpt;k++)
{
# Comparer si la clé du tableaux a l'index k est identique à la valeur de var
if(tabKey[k] == Var) {
# Si OUI, inscrire sa valeur dans une variables et sortir (astuce : mettre l'index k = à la taille du tableaux)
typeMUSI=tabRes[k];
k=cpt;
}
else
{
# Si NON, mettre à vide la variable
typeMUSI=" ";
}
}
...
} ' fichier_1.txt
|
|
|
|
![]() |
![]() |
||
awk avec tableaux
|
||
| Outils de la discussion | |
|
|