Shell : ajouter des espaces sur première ligne d'un fichier
Bonjour,
Longtemps que je n'ai plus mis les pieds ici, mais jamais oublié :mouarf:
Je me heurtes à un mur, et ca fait mal :
Nous générons quotidiennement un fichier (par un batch qui execute un prog cobol) : que nous appellerons toto.txt
Le problème est que la première ligne, de longueur variable, doit contenir 500 caractères.
Actuellement, ce traitement est fait manuellement : on rajoute des espaces à la fin de la première ligne jusqu'à arriver à 500 carac.
Je souhaite automatiser ce traitement.
Modifier le programme cobol n'est pas envisageable ( :calim2: ), il me reste le shell (unix), que je ne connais que de surface.
Mon idée était :
1. Copier la première ligne du fichier toto.txt dans: toto_Ligne1.txt (avec sed)
2. Supprimer la 1ère ligne de toto.txt
3. Ajouter les espaces manquants à toto_ligne1.txt
4. concatener les deux fichiers (dans le bon ordre :aie:)
5. supprimer le fichier toto_ligne1.txt
Or je ne vois pas comment ajouter les espaces.
De même, j'ai lu que sed permettait d'éditer directement un fichier et si cela était possible, ce serait plus pratique.
Bref, je suis un peu perdu :(
Sed, c'est bien… comme disait la pub ;-)
Salut,
Le fichier d'origine avec un aperçu des fins de lignes :
Code:
1 2 3 4 5 6 7
| cat brol -A
Mon idM-CM-)e M-CM-)tait :$
1. Copier la premiM-CM-(re ligne du fichier toto.txt dans: toto_Ligne1.txt (avec sed)$
2. Supprimer la 1M-CM-(re ligne de toto.txt$
3. Ajouter les espaces manquants M-CM- toto_ligne1.txt$
4. concatener les deux fichiers (dans le bon ordre )$
5. supprimer le fichier toto_ligne1.txt$ |
Le nombre de caractère de la ligne la plus longue (la 2nd) :
La moulinette sed (c'est raccord avec la pub), qui ajoute un espace en fin de ligne tant que la ligne ne fait pas 86 caractères. L'option -i.bak permet d'éditer le fichier en place et d'en faire une sauvegarde :
Code:
$ sed -i.bak '1 {:z;s/^.\{1,85\}$/& /;tz}' brol
On vérifie la longueur de la ligne la plus longue :
On vérifie l'affichage des fins de lignes :
Code:
1 2 3 4 5 6 7
| $ cat brol -A
Mon idM-CM-)e M-CM-)tait : $
1. Copier la premiM-CM-(re ligne du fichier toto.txt dans: toto_Ligne1.txt (avec sed)$
2. Supprimer la 1M-CM-(re ligne de toto.txt$
3. Ajouter les espaces manquants M-CM- toto_ligne1.txt$
4. concatener les deux fichiers (dans le bon ordre )$
5. supprimer le fichier toto_ligne1.txt$ |
;)