Je voudrais lire un fichier d'entrée ligne par ligne, recalculer certains champs et afficher les résultats dans un autre fichier formaté différemment.
Je suppose que je dois utiliser awk et des tableaux associatifs pour assigner des variables.
Format du fichier d'entrée (ex de ligne) :
BC2753;Personnages célèbres. Musiciens;;Poste;1992;2;18,00;0;0;0;0;0;0;0;0;0;0;0;0;0;0;;
soit 22 champs, séparés par ";"
format du fichier de sortie :
Description;Unité;Propriété;Code de l'article;Prix;T.V.A.;Transport;Poids;Prix d'achat;Stocks
soit 10 champs, séparés par ";"
le champs Description correspon au champs "Personnages célèbres. Musiciens"
le champs Unité = "à l'unité"
le champs Propriété est vide
le champs Code de l'article est la concaténation de "BC2753", de "Poste" et de "1992"
le champs "Prix" = 18,00 divisé par la valeur du champs Stocks soit 2 dans l'exemple (division numérique)
le champs "T.V.A." = TVA normale
les champs "Transport", "Poids" et "Prix d'achat" sont vides
le champs "Stocks" = 2
Pour compliquer la chose : les champs "Stocks" et "Prix" ne sont pas toujours à la même place selon les enregistrements ; les combinaisons possibles
sont :
1 2 3 4 5
| $7/$6
$10/$9
$13/$12
$16/$15
$19/$18 |
il n'ya jamais deux combinaisons ou plus dans un même enregistrements
j'arrive à quelque chose comme :
1 2 3 4 5 6 7 8 9
| awk 'BEGIN {FS=";";OFS=";"}
$6 >= 2 {
tab[Prix]=$7;tab[Stocks]=$6
prix=tab[Prix]/tab[Stocks];
tab[Description]=$2;tab[Propriété]=$5;tab[Code de l'article]=$1$3;tab[Prix]=$7;tab[Stocks]=$6
for (c in tab) printf("%s", tab[c])
print ""
}
' < ${FICSUP2} > ${FICSUP3} |
Mais cela ne fonctionne pas ; qui a une solution ?
Partager