Bonjour :coucou:
Donc, on se résume. Voici un fichier pour lequel :
- on ne peut pas se caler sur les "=" puisque des valeurs ont des = en plein milieu.
- on ne peut pas se caler sur les espaces, car les valeurs ont des espaces en plein milieu
- Et en plus, la fin de ligne est en formattage windows : \r\n au lieu de \n
Hé bé. :(. Je ne vois qu'une machine d'états pour régler le truc.
- état 1 : on attend le header
- état 2 : on attend la valeur
- état 3 : on attend la fin de la protection par guillemets.
Pour la fin de ligne on fait le traditionnel :
Avec ou sans -i pour un changement définitif ou non.Code:sed -i 's/\r$//' fichier.log
Après :
Pour avoir balancé le résultat dans LibreOffice, cela semble marcher. Malgré les problèmes identifiés plus haut.Code:awk -F '' '{etat=1;header="";valeur=""; for (i=1;i<=NF;i++) if (etat==1) if ($i=="=") etat=2; else header=header""$i;else if (etat==2) if ($i==" ") {h[header]++;tab[NR,header]=valeur;header="";valeur="";etat=1;} else {valeur=valeur""$i;if ($i=="\"") etat=3;} else if (etat==3) {valeur=valeur""$i;if ($i=="\"") etat=2;}} END{n=asorti(h,s); for (i=1;i<=n;i++) printf("%s%s",s[i],((i==n)?"\n":","));for (l=1;l<=NR;l++) for (i=1;i<=n;i++) printf("%s%s",tab[l,s[i]],((i==n)?"\n":",")); }'