Shell - Report d'1 champ sur plusieurs lignes
coco44
-
coco44 -
coco44 -
Bonjour,
J'ai un fichier à format fixe que je dois charger sous Oracle en SQL*Loader. Mon fichier contient différents types de lignes (défini par le 1er caractère) : une ligne d'entête (type A) et des lignes de détail (type B ou C). Avant le chargement, le fichier est découpé en 3 : les entêtes d'un côté et les 2 différents types de détail de l'autre, qui partiront vers 3 tables différentes ensuite sous Oracle.
Problème : je dois reporter un champ de la ligne d'entête vers ses lignes de détails. Et impossible de le faire après sous Oracle car ce champ sert justement à faire le lien entre les 2 tables. L'ordre du fichier est séquentiel soit :
A Entête1 Champ_a_reporter
B Détail1
C Détail1
A Entête2 Champ_a_reporter
B Détail2
...
=> L'objectif est donc de reporter un champ de la ligne de type A vers toutes ses lignes de types autres que A (soit celles qui précèdent la prochaine ligne de type A).
Est-ce réalisable en shell ? et si oui je veux bien un peu d'aide parce que je sèche là :?
Merci d'avance
J'ai un fichier à format fixe que je dois charger sous Oracle en SQL*Loader. Mon fichier contient différents types de lignes (défini par le 1er caractère) : une ligne d'entête (type A) et des lignes de détail (type B ou C). Avant le chargement, le fichier est découpé en 3 : les entêtes d'un côté et les 2 différents types de détail de l'autre, qui partiront vers 3 tables différentes ensuite sous Oracle.
Problème : je dois reporter un champ de la ligne d'entête vers ses lignes de détails. Et impossible de le faire après sous Oracle car ce champ sert justement à faire le lien entre les 2 tables. L'ordre du fichier est séquentiel soit :
A Entête1 Champ_a_reporter
B Détail1
C Détail1
A Entête2 Champ_a_reporter
B Détail2
...
=> L'objectif est donc de reporter un champ de la ligne de type A vers toutes ses lignes de types autres que A (soit celles qui précèdent la prochaine ligne de type A).
Est-ce réalisable en shell ? et si oui je veux bien un peu d'aide parce que je sèche là :?
Merci d'avance
A voir également:
- Shell - Report d'1 champ sur plusieurs lignes
- Classic shell - Télécharger - Personnalisation
- Crystal report download - Télécharger - Présentation
- Crystal report viewer - Télécharger - Gestion de données
- Écrire plusieurs lignes dans une cellule excel mac - Guide
- Ligne d'adresse 1 ✓ - Forum Réseaux sociaux
4 réponses
hllo
$ cat a1 A Entête1 Champ_a_reporter1 B Détail1 C Détail1 A Entête2 Champ_a_reporter2 B Détail2 $ $ awk '/^A/ {c=$3;print;next} {print $0, c} ' a1 A Entête1 Champ_a_reporter1 B Détail1 Champ_a_reporter1 C Détail1 Champ_a_reporter1 A Entête2 Champ_a_reporter2 B Détail2 Champ_a_reporter2 $
Salut,
Voilà un exemple avec "sed". Je pars du principe que le champ à reporter est le dernier sur la ligne, qu'il ne comporte pas d'espace dans son libellé et que les lignes d'en tête commencent toujours par "A" :
;-))
Voilà un exemple avec "sed". Je pars du principe que le champ à reporter est le dernier sur la ligne, qu'il ne comporte pas d'espace dans son libellé et que les lignes d'en tête commencent toujours par "A" :
$ cat plop A Entête1 Champ_a_reporter1 B Détail1 C Détail1 A Entête2 Champ_a_reporter2 B Détail2 C Détail2 A Entête1 Champ_a_reporter3 B Détail3 C Détail3 $ sed ':t;/^A/{h;s/.* //;x;:z;n;/^A/!{G;s/\n/ /;bz}};bt' plop A Entête1 Champ_a_reporter1 B Détail1 Champ_a_reporter1 C Détail1 Champ_a_reporter1 A Entête2 Champ_a_reporter2 B Détail2 Champ_a_reporter2 C Détail2 Champ_a_reporter2 A Entête1 Champ_a_reporter3 B Détail3 Champ_a_reporter3 C Détail3 Champ_a_reporter3 $
;-))