Bonsoir � tous

Je butte sur un probl�me de "associative array" avec awk. Y a-t-il un sp�cialiste awk dans l'avion?

En bref, j'ai une base de donn�e � r�-�crire sous un autre format, et la difficult� vient du fait que chaque record a un nombre de champ variable, et dans le d�sordre le plus total. Voir fichier tt1.txt en annexe.

Mon petit script awk se pr�sente comme suit:

station0:~/tmp$ cat Export_filtre2.ak
BEGIN{
RS = "^L^M"
FS = "^M"
OFS = "\t"
}

{
for (i=1; i<= NF; i++)
        {
        split($i,array,":  ")
        nom = array[1]
        val = array[2]
        champ[nom]=val
        print i  nom champ[nom]
        print "AAA" champ["Type"]
        print "BBB" champ["LastName"]
        print "CCC" champ["FirstName"]
        print "DDD" champ["CompanyName"]
        print "EEE" champ["OfficeStreetAddress"]
        print "FFF" champ["OfficeCity"]
        print "GGG" champ["City"]
        }
}
station0:~/tmp$

Dans ce cript, j'attribue donc un nom (par exemple "LastName") pour chaque champ et une valeur pour ce champ (par exemple: "MEYER")

D'apr�s ma doc (the AWK Programming Language, Aho, Kernigan, Weinberger), les subscripts des arrays sont des strings ce qui permet de dire que si nom="LastName" et que val="MEYER", je peux d�finir un array champ[nom],
et si j'attribue une valeur:
champ[nom] = val
la ligne print champ["Lastname"] me donne comme r�sultat MEYER


Curieusement, �a marche pour la premi�re attribution et ensuite je n'arrive pas � r�-attribuer une nouvelle valeur � "champ[nom]" lorsque "nom" change � la prochaine it�ration de la boucle.

Voici le r�sultat ci-dessous. Deux choses m'intriguent:
A) pour le premier print (1TypePerson) tout est sur une seule ligne, alors que pour les print suivants, comme celui ci:
2
OrgTableE0
on a un saut de ligne ???


B) A partir du troisi�me champ, on devrait avoir
3
LastNameMEYER
AAAPerson
BBBMEYER
mais le MEYER n'apparait pas.

Quelqu'un saurait-il ce que je fais de faux?

Pierre Maitre


station0:~/tmp$ awk -f Export_filtre2.ak tt1.txt | head -40 1TypePerson AAAPerson BBB CCC DDD EEE FFF GGG 2 OrgTableE0 AAAPerson BBB CCC DDD EEE FFF GGG 3 LastNameMEYER AAAPerson BBB CCC DDD EEE FFF GGG 4 FirstNameAbel AAAPerson BBB CCC DDD EEE FFF GGG 5 FullNameAbel MEYER AAAPerson BBB CCC station0:~/tmp$


-- Dr Pierre-O. Maitre Privat Docent FMH Anesth�siologie FMH Pharmacologie Clinique Cabinet m�dical / A la Joy CH-1273 Genolier Switzerland
Type:  Person
OrgTable:  E0
LastName:  MEYER
FirstName:  Abel
FullName:  Abel MEYER
JobTitle:  Monsieur
CompanyName:  Ecole secondaire 
OfficeStreetAddress:  En Forestaux
OfficeCity:  Tours
BusinessAddress:  En Forestaux Tours, 
StreetAddress:  En Forestaux
City:  Tours
HomeAddress:  En Forestaux Tours, 
Principal:  CN=Pierre Bolomey/OU=DFJ/O=admin-TX
AssignedTo:  CN=Pierre Bolomey/OU=DFJ/O=admin-TX
$UpdatedBy:  CN=Pierre Bolomey/OU=DFJ/O=admin-TX


Type:  Person
ExcludeFromView:  D
$PublicAccess:  1
Categories:  Professionnel
OrgTable:  E0
CompanyName:  Acad�mie de Blois - Rectorat
OfficeCity:  Blois
BusinessAddress:  Blois, 
OfficePhoneNumber:  0033  41 xx xx 70
Principal:  CN=Pierre Bolomey/OU=DFJ/O=admin-TX
AssignedTo:  CN=Pierre Bolomey/OU=DFJ/O=admin-TX
$UpdatedBy:  CN=Pierre Bolomey/OU=DFJ/O=admin-TX



Répondre à