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
