|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : août 2006 Messages : 16 ![]() |
Bonjour
J'ai un fichier texte issu d'un programme cobol avec des données textes (ASCII) qui vont de la colonne 0 à 160, et je voudrais par un script Shell réorganiser les enregistrements. Je voudrais mettre sur une seule ligne toutes les données (enregistrements) de ce fichier texte de bout en bout comme dans un format fixe de type "no-text", c'est à dire sans retour à la ligne. Serait-il possible de le faire avec une composition de commande unix : Avec SORT, WC....? Qlq'un pourrait-il me guider sur la syntaxe ? |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : août 2006 Messages : 16 ![]() |
|
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé Sénior
![]() Laurent WillemsExpert Stop/Start Inscription : septembre 2002 Messages : 2 474 ![]() |
Salut,
Code :
__________________
Alea Jacta Test! |
||
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : août 2006 Messages : 16 ![]() |
Merci beaucoup Mygale
![]() Bravos, voilà une syntaxe de commandes puissantes, moi qui pensait lire toutes les lignes une à une et les copier dans un fichier résultant à la suite. Je ne connaissais pas cette commande 'TR'. Toutefois, un petit 'hic' , la fin de chaque ligne du fichier cobol présente un vide de blanc de 6 espaces (de 154 à 160), et la commande n'en tient pas compte et positionne chaque ligne juste après le dernier caractère de la ligne. Y at-il un moyen d'affiner la commande pour tenir compte d'un espace de 6 blancs ?
|
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé Sénior
![]() Laurent WillemsExpert Stop/Start Inscription : septembre 2002 Messages : 2 474 ![]() |
Et bien toujours avec le commande tr
Code :
__________________
Alea Jacta Test! |
||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : août 2006 Messages : 16 ![]() |
Que signifie -d ' ' dans ce contexte ? C'est le contraire qu'il faudrait, plutôt ajouter 6 blancs en fin de ligne de chaque enregistrement ligne. Pas facile... |
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé Sénior
![]() Laurent WillemsExpert Stop/Start Inscription : septembre 2002 Messages : 2 474 ![]() |
Re sorry je n'ai pas lu l'énoncé jusqu'au bout
tr -d ' ' -> supprime les espaces si tu veux avoir 6 blancs entre chaque ligne tu peux taper ceci: Code :
__________________
Alea Jacta Test! |
||
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : août 2006 Messages : 16 ![]() |
Pas mal le combiné avec CAT + XARGS + SED
Mais il ne manque qu'un petit ajustement pour que ça fonctionne, car la syntaxe : sed -e 's/ / 6 espaces /g' a mis tous les espaces blancs des lignes sur 6 espaces, même les espaces dans la syntaxe des données. Mais ça a bien mis toutes lignes sur une seule ligne comme avec la commande TR. Il faudrait donc incrémenter les 6 blancs seulement en fin de chaque ligne. Est-ce la commande SED à reparamétrer ? |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() Laurent WillemsExpert Stop/Start Inscription : septembre 2002 Messages : 2 474 ![]() |
Pourrais-tu fournir un échantillon de ton fichier généré par le programme cobol?
__________________
Alea Jacta Test! |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : août 2006 Messages : 16 ![]() |
Toutes les lignes doivent être à la suite sur une seule ligne sachant qu'il y a 6 blancs à la fin de chaque ligne à incrémenter. Je pensais faire du 'jonglage' ou 'parade' pas très conventionnel ni logique, c'est à dire dans le programme cobol qui génère le fichier , rajouter à la 160e colonne un caractère peu utilisé le '§' . Ainsi les 6 espaces de fin de ligne auraient un marquage de fin. Puis ensuite le remplacer par un blanc après avoir mis les lignes sur une seule ligne : tr -d '\n' < fichier.txt | tr '§' ' ' > fichier_résultat Mais c'est mieux de ne pas toucher au cobol si un combiné unix serait possible. |
|
|
00
|
|
|
#11 | ||
|
Expert Confirmé Sénior
![]() Laurent WillemsExpert Stop/Start Inscription : septembre 2002 Messages : 2 474 ![]() |
Voilà
de cette manière ça devrait aller: Code :
__________________
Alea Jacta Test! |
||
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : août 2006 Messages : 16 ![]() |
Impeccable
![]() De visu le fichier en résultat fonctionne ![]() C'est donc le $ du sed -e 's/$/ /g' qui a fait la différence, et une mise à la ligne ensuite Merci pour ton aide et maîtrise incontestée et surprenantes des instructions unix ![]() Ce cas pourra servir à de nombreux usages, car il est fréquent de transmettre des fichiers d'enregistrements en une seule ligne (ASCII texte) dans les échanges de fichiers multi-standards : bandes de virements, bordereaux de reporting etc...
|
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : août 2006 Messages : 16 ![]() |
Bonjour Mygal
Encore un petit ajout à la commande passée : Actuellement, avec cette commande, la dernière ligne donne donc 6 espaces blancs. ![]() Comment faire de sorte que seulement la dernière ligne présente 42 espaces blancs à la fin au lieu de 6 ? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com