Bonjour,
J'ai un fichier ascii à imprimer, en mode raw sur une imprimante.
Ça, je sais faire. Le problème, c'est que ce fichier comporte 84 pages d'éditions sur 66 lignes, et qu'un certain nombre d'informations ne sont pas placées au bon endroit.
Je recherche donc la commande magique qui me permettrait d'enlever 3 lignes par pages.
Pour être plus clair, il me faudrait un script qui m'enlève les lignes 57, 58, 59, puis les lignes 123,124, 125, etc jusqu'à la fin du fichier.
Si vous avez une idée, je cherche de mon côté en attendant....
# head et tail
Posté par 桃白白 . Évalué à 1.
# Ca doit être bon
Posté par omnikron . Évalué à 3.
#!/usr/bin/perl
my $orig_file = "mon_fichier";
my $new_file = "mon_nouveau_fichier";
my @all_lines = `cat $orig_file`;
my $first_skip = 57;
my $n_skip = 3;
my $i = 1;
chomp(@all_lines);
for(my $j=0; $j<scalar(@all_lines); $j++) {
if($i == $first_skip) {
$i = 1;
$j += $n_skip-1;
next;
}
`echo $all_lines[$j] >> $new_file`;
$i++;
}
Sur le principe ça semble bon... par contre en ce qui concerne l'écriture du nouveau fichier... Si tu as des caractères non alpha (apostrophe, quote, etc) je te conseille d'utiliser les mécanismes perl pour écrire la ligne (open, close, etc).
# avec awk
Posté par Pascal Terjan (site web personnel) . Évalué à 7.
# un peu de shell et de sed...
Posté par liberforce (site web personnel) . Évalué à 4.
#! /bin/sh
begline=57
endline=59
pagesize=66
pagecount=84
action="d"
# Creation du fichier de script sed
> sedscriptfile
for page in $(seq 0 $pagecount)
do
let "pagebegline=begline + page * pagesize"
let "pageendline=endline + page * pagesize"
echo "$pagebegline,$pageendline$action" >> sedscriptfile
done
ce script te génère la liste des action à effectuer pour une commande sed dans le fichier sedscriptfile. Par exemple "57,59d" indique de supprimer les ligne 57 à 59.
Un simple sed -f sedscriptfile nom_de_ton_fichier > nouveau_fichier fera ensuite l'affaire... A ton service ;-)
# Merci @ tous !
Posté par Gyro Gearllose . Évalué à 3.
Comme je suis informaticien, et donc feignant (ou le contraire, je ne sais plus), je me suis orienté vers la commande awk proposée par Pascal Terjan.
C'est parfait. Il ne me reste qu'à vous remercier tous.
[^] # Re: Merci @ tous !
Posté par Calim' Héros (site web personnel) . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.