Alignement de colonne - Script shell / Linux

Fermé
endefu Messages postés 21 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 7 septembre 2010 - 22 juin 2009 à 17:46
endefu Messages postés 21 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 7 septembre 2010 - 23 juin 2009 à 18:28
Bonjour,

Je dois faire un script pour compléter un fichier text. Disons que mon fichier text est de cette forme

#sly4                                SLy4
*DFTX31   40  -1                     DFTX
*RDFX31   40  -1                     RDFTX
#hsly4                               SLy4
*dftm     40  -1                     DFTM
#t6                                  T6
*dftm     40  -1                     DFTM


C'est pas très beau en effet. J'ai finalement réussi à faire mon script pour completer ce fichier et j'obtiens des choses de la forme :


#sly4                                SLy4
*DFTX31   40  -1                     DFTX
*RDFX31   40  -1                     RDFTX
*NEW 40 -1 DFTX
#hsly4                               SLy4
*dftm     40  -1                     DFTM
#t6                                  T6
*dftm     40  -1                     DFTM


Il y a une nouvelle ligne que j'ai insérer mais il y a un problème d'alignement. Autre facon de compléter le fichier

#sly4                                SLy4
*DFTX31   40  -1                     DFTX
*RDFX31   40  41  -1                     RDFTX
#hsly4                               SLy4
*dftm     40  -1                     DFTM
#t6                                  T6
*dftm     40  -1                     DFTM


Là encore un problème d'alignement survient.
Bref, je voudrais savoir si il y a moyen de gérer cette alignement après coup pour faire des belles colonnes. Tout ca en shell pour l'insérer dans mon script. J'espere que cela est possible après coup ca m'éviterait de vous ennuyer avec tout mon script.

Merci
A voir également:

2 réponses

Bonsoir,

Je suis nul de chez nul est shell.
Mais je sais que pour la manipulation de données, c'est perl qui fait ça le mieux.
=> http://perl.enstimac.fr/DocFr/perlform.html

Cordialement,
0
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
23 juin 2009 à 09:47
hello
utiliser printf et les formats
$ cat f1
#sly4                                SLy4
*DFTX31   40  -1                     DFTX
*RDFX31   40  -1                     RDFTX
*NEW 40 -1 DFTX
#hsly4                               SLy4
*dftm     40  -1                     DFTM
#t6                                  T6
*dftm     40  -1                     DFTM
$ 
$ cat f1 ; printf "%-7s%5s%4s%25s\n" *NEW 40 -1 DFTX
#sly4                                SLy4
*DFTX31   40  -1                     DFTX
*RDFX31   40  -1                     RDFTX
*NEW 40 -1 DFTX
#hsly4                               SLy4
*dftm     40  -1                     DFTM
#t6                                  T6
*dftm     40  -1                     DFTM
*NEW      40  -1                     DFTX
$ 
0
endefu Messages postés 21 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 7 septembre 2010 1
23 juin 2009 à 18:28
Ok merci, avec printf ca marche pour le premier cas (la moitié de mes remplissages).
Par contre, pour le deuxième cas je suis toujours bien embeté. Précisions, je ne connais pas à priori ce qui se trouve dans le fichier text, et donc quand je remplis une ligne avec une nouvelle valeur (ici : 41) je connais pas le nombre d'espace que je doit mettre pour que la dernière colonnes soit alignées. Suis je clair?


#sly4                                SLy4
*DFTX31   40  -1                     DFTX
*RDFX31   40  41  42  43  -1             RDFTX
#hsly4                               SLy4
*dftm     40  -1                     DFTM
#t6                                  T6
*dftm     40  -1                     DFTM



Par exemple ici j'ai rempli avec un 43 mais je savais pas dans mon script au moment de l'inserer combien il y avait d'espaces. Bon je vais quand même réflechir si j'ai pas moyens de le savoir, mais ca va surement compliquer la tache.

Merci.
0