Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/10/2006, 19h23   #1
Invité de passage
 
Inscription : octobre 2006
Messages : 1
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 1
Points : 0
Points : 0
Par défaut Formatage de fichier avec awk

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) :

Code :
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 :

Code :
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 :

Code :
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 :

Code :
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 ?
sam56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2006, 11h04   #2
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Citation:
Envoyé par sam56
Pour compliquer la chose : les champs "Stocks" et "Prix" ne sont pas toujours à la même place selon les enregistrements ; les combinaisons possibles
sont :

Code :
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
Si tu n'as pas de critère pour les localiser dans la chaîne, je ne vois pas comment tu pourrais faire. Supprimer les champs vide ou nuls? Est-ce que les champs stock et prix se trouvent alors à la même place?
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h18.


 
 
 
 
Partenaires

Hébergement Web