SED ajouter un nobre variable de caratères

Résolu/Fermé
McFred - Modifié par McFred le 22/01/2013 à 13:13
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 23 janv. 2013 à 08:30
Bonjour,

Est il possible avec sed ou awk, voir les deux d'ajouter un nombre variable de caractères.

j'ai des lignes

ABCDEF
TOTO
TATA

mon fichier de sortie doit faire 40 caractères

donc je voudrai ajouter des . jusqu'à la fin

ABCDEF ajout de 34 points à la fin
6 points au début TOTO et 30 points à la fin
3 points TATA et 33 points

ABCDEF..................................
......TOTO..............................
...TATA.................................


Ha j'oubilais, je connais le nombre de point à mettre avant et après...
J'ai ça dans un variable Pt


Merci les dieux du sed et du awk !
A voir également:

4 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
22 janv. 2013 à 14:23
hello
une possibilité, mais y a sûrement moyen de faire plus court
$ Pt="0 4 3"
$ awk -v pt="$Pt" 'BEGIN{split(pt, pt2)} {for(n=1;n<=40;)t[n++]="."; split($0, c, "."); for(n=1;n<=length();)t[pt2[NR]+n-1]=c[n++]; for(n=1; n<=40;)printf t[n++]; print ""}' fichier
ABCDEF..................................
....TOTO................................
...TATA.................................
$ 
1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
22 janv. 2013 à 16:36
correction, changer split($0, c, "."); par split($0, c, "");
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
23 janv. 2013 à 08:30
code plus court
$ Pt="0 4 3"
$ awk -v pt="$Pt" 'BEGIN{split(pt, p2)} func p(x){while(x--)printf "."} {p(p2[NR]); printf $0; p(40-length()-p2[NR]); print ""}' fichier
ABCDEF..................................
....TOTO................................
...TATA.................................
$
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
22 janv. 2013 à 13:17
Salut,

Rajouter des points avant et/ou après pour avoir 40 caractères c'est possible :
$ cat bar
ABCDEF
TOTO
TATA

$ sed ':z;s/^.\{1,40\}$/&./;tz' bar 
ABCDEF...................................
TOTO.....................................
TATA.....................................

Par contre pour le reste il faudrait savoir quels sont les critères qui induisent le choix de tant de caractères avant et/ou après ???
0
Le critère est que j'ai 3 variables.

La première Pt me donne le nombre de . qu'il faut avant
La deuxième Ch me donne le nombre de Caratères ( ABCDEF )
la Troisième PtEnd le nombre de . qu'il faut après ( calcul de 40 - Pt + Ch )

Le fichier est souvent avec des chiffres, et le but est qu'ils soient alignés pour faire une somme sous un framework pour des statistiques.

D'où des . avant et après.


En tous cas merci pour ton aide
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
22 janv. 2013 à 14:02
Et tes variables s'interfacent de quelle façon ? T'aurais un exemple concret ?
0
Y'en a qui sont vraiment tombés dedans quand il étaient petit !

Là je dis chapeau bas !

Vraiment merci !
0