Hello !
Voilà, je suis confronté au problème suivant :
j'ai un fichier texte contenant le caractère spécial de contrôle réalisant un saut de page, le fameux ^L.
Je voudrai écrire une commande sed (ou autre, peu importe) qui me supprime un saut de page sur deux rencontrés dans ce fichier.
Je sais bien qu'un sed -i s/^L// fichier va me les supprimer, mais comment faire pour n'en supprimer qu'un sur deux ?
Je ne vois pas du tout du tout comment procéder, et ce n'est pas faute d'avoir lu et relu les pages d'infos de la commande sed.
Merci pour toute aide que vous pourrez me donner sur le sujet.
# Petit complément d'informations.
Posté par Gyro Gearllose . Évalué à 2.
Le problème est ailleurs, malheureusement, et du coup, je reformule ma question.
Pour expliquer mon problème voici quelques explications. Il s'agit d'un programme qui me génère des fichiers textes en vue d'imprimer des étiquettes. Pour ce faire j'ai un paramètre qui me permet de préciser si je vais imprimer des étiquettes en continu, sur du papier listing, ou sur des feuilles A4.
Les étiquettes sont de toutes façons au format A5 paysage.
Si j'indique au programme que je veux des étiquettes en continu, en fait, j'ai un saut de page juste après le cadre de l'étiquette, ce qui fait que j'ai toujours mes 36 lignes de remplies.
Par contre, si j'indique que je veux imprimer mes étiquettes sur du format A4, le programme remplit la suite de la première étiquette de la page avec des lignes vides pour que la seconde débute au bon endroit (théoriquement). Et c'est là que le bat blesse, car au lieu que la seconde étiquette de la page débute ligne 37, elle débute ligne 34.
Du coup, à l'édition rien ne va plus.
C'est donc sur ce second problème qu'il faut que je me penche, mais je ne vois pas trop comment faire pour ajouter 4 lignes dans un fichier dont le contenu est très variable d'une page à l'autre.
Je n'ai pas de points d'ancrage pour placer un sed (ou autre) correct, il va donc falloir que je trouve une autre solution, qui risque d'être une modification manuelle des fichiers générés par cette application.
Pardon pour le dérangement, finalement, je me suis emporté sur ce coup là...
[^] # Re: Petit complément d'informations.
Posté par Nicolas Boulay (site web personnel) . Évalué à 3.
Il faut juste rajouter un etat qui compte les ligne et faire en fonction.
while(<>){
$cpt++;
if($cpt==37) {&cpct=0; print "\n"}
}
enfin, bref, ce genre de structure de script.
"La première sécurité est la liberté"
[^] # Re: Petit complément d'informations.
Posté par gaaaaaAab . Évalué à 2.
En reprenant le même fichier toto qu'abofrp31 :
awk 'BEGIN {RS="^L"}{print NF}' toto
6
4
3
3
3
yapuka (c) travailler sur le traitement que doit faire awk. peut-être pour avoir des sauts de lignes toutes les 10 lignes, quelque chose comme ça :
nb_lignes=10
awk 'BEGIN {RS="^L"; ORS=""}{print $0; for(i=NF; i <= '$nb_lignes'; i = i+1) print "\n"; print "^L"}' toto
il reste un ^L en toute fin de fichier.
Si ça ne te convient pas, il suffit dans un premier temps d'appliquer ce script awk sans le print "^L", et dans un deuxième temps d'ajouter les "^L" en question toutes les nb_lignes
# il faut jouer
Posté par abofrp31 . Évalué à 2.
IUI2:root # cat toto
ezrze
rzeerz
rzerzer
zrerze
zrezre
zezer
^L
ezrzrerez
rzerzezre
zrezrezre
zerzzrer
^L
rzerzezreze
zrrzezrezer
zerrzeezr
^L
rzrzezre
zrzrerze
zzerzre
^L
rzerzrze
zrezrzer
zerzerze
IUI2:root #
IUI2:root # sed 'n;N;s/\^L/ /' toto
ezrze
rzeerz
rzerzer
zrerze
zrezre
zezer
^L
ezrzrerez
rzerzezre
zrezrezre
zerzzrer
rzerzezreze
zrrzezrezer
zerrzeezr
^L
rzrzezre
zrzrerze
zzerzre
rzerzrze
zrezrzer
[^] # Re: il faut jouer
Posté par abofrp31 . Évalué à 3.
sed '/^L/1~2d' toto
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.