Copier 100 lignes d un fichier [Résolu/Fermé]

Signaler
-
 CYG -
Bonjour,
j ai un fichier qui contient un trés grand nombre de lignes, mon objectif c'est de copier 100 lignes à partir de la ligne numéro 105(ligne soulignée), et les mettre dans un tableau pour effectuer des calculs sur les colonnes.
voici un extrai de mon fichier:
<
.
.
.
Peak search ovs window (l,p): 16 , 16
Oversampling factor: 32
Number_of_correlation_windows: 100
Number posL posP offsetL offsetP correlation
0 8452 2842 390.00 -2.62 0.16
1 8452 3133 332.94 36.75 0.15
2 8452 3425 370.31 26.56 0.12
3 8452 3716 375.16 38.09 0.13
4 8751 2939 390.97 15.22 0.14
5 8751 3230 389.44 8.16 0.18
6 8751 3522 355.34 40.38 0.09
7 8751 3813 360.94 8.81 0.19
8 9051 3036 361.91 9.31 0.24
9 9051 3327 346.34 -20.34 0.16
10 9051 3619 347.28 31.03 0.13
11 9350 2842 362.06 8.88 0.29
12 9350 3133 360.81 8.31 0.14
13 9350 3424 332.69 -22.91 0.14
14 9350 3716 347.25 -20.75 0.15
15 9650 2939 361.69 9.06 0.47
16 9650 3230 361.62 8.59 0.34
.
.
.>
guelqu'un peut m aider???

merci d avance;

CYG

26 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
Et "CTRL A" + "CTRL C" ça marche pas non plus ?
Oupps ça marche pas

merci d avance

CYG
bonjour,

merci jipicy pour l aide, pour le moment la premiére partie du probléme est résolue, il me reste la deuxiéme, dont l objectif est , aprés calculer la moyenne et l'ecart type, de la 4éme et la 5éme colonne, je dois faire le test sur chaque valeur de la colonne 4 et 5, le test est comme suit:
* si abs(val4 - moyenne4)<ecart type 4 remplacer valeur de la colonne 6 par 0.01
* si abs(val5 - moyenne4)<ecart type 5 remplacer valeur de la colonne 6 par 0.01

aprés les modifications, je dois copier les 100 lignes et les coller dans leurs ancien fichier(mise à jour du fichier du départ).

quelqu'un peut m'aider??

merci d avance

CYG
salut,

j ai vérifier votre(jipicy) formule d écart type, ça donne pas le résultat voulu,

la formule d'ecart type et:

Ecart type= sqrt((Σ(val4-moy4)^2)/(nb de ligne - 1))
Σ: la somme des (chaque valeur de la colonne 4 - moyenne 4)

merci d avance;

CYG
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
j ai vérifier votre(jipicy) formule d écart type, ça donne pas le résultat voulu,
Ben tu corriges et tu adaptes !

Il serait peut être temps que tu y mettes un peu du tien, non ?
j ai modifié le script mais je sais pas comment je vais bouclé la premiére boucle(de calcul de moyenne) et ouvrir une autre boucle pour le calcul de l ecart type tt en utilisant la moyenne résultante de la premiére boucle

voici le code <
{
sum1 +=$4; moy1 = (sum1 / 16)
sum2 +=$5; moy2 = (sum2 / 16)
}
{
ecart1 += ($4 - moy1)^2
ecart2 += ($5 - moy2)^2
}

END {
printf "\t\t%s\t\t%s\t\t%s\n"," Total","Moyenne","Ecart type"
printf "Colonne 4 :\t% .2f\t% .2f\t\t% .2f\n",sum1,moy1,sqrt(ecart1/15)
printf "Colonne 5 :\t% 8.2f\t% .2f\t\t% .2f\n",sum2,moy2,sqrt(ecart2/15)

merci d avance

CYG
salut;
alors des suggestions?????
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Salut,

vaut peut être mieux de garder le fichier d'origine que tu pourras supprimer après
donc on va diriger le résultat dans un nouveau fichier qu'on l'appelera fic_ecart par exemple

1ère méthode - en utilisant la rédirection de shell
perl cyg.pl > fic_ecart
2ème méthode - ouverture d'un handle en écriture vers fic_ecart
#!/usr/bin/perl
use strict;use warnings;

my($c3,$c4,$m4,$m5,$n,$e1,$e2);

open ECRIRE,">fic_ecart" or die "E/S : $!\n";
open F,"fic" or die "E/S : $!\n";
while(<F>){
  next if /^\s*$/;
  my @col=(split /\s+/,$_)[3,4];
  $c3+=$col[0];
  $c4+=$col[1];
  ++$n;
}
$m4=$c3/$n;
$m5=$c4/$n;
$e1=sqrt((($c3-$m4)^2) / $n);
$e2=sqrt((($c4-$m5)^2) / $n);

printf ECRIRE "\t\t%s\t\t%s\t\t%s\n"," Total","Moyenne","Ecart type";
printf ECRIRE "Colonne 4 :\t% .2f\t% .2f\t\t% .2f\n",$c3,$m4,$e1;
printf ECRIRE "Colonne 5 :\t% 8.2f\t% .2f\t\t% .2f\n\n",$c4,$m5,$e2;
close F;

open F,"fic" or die "E/S : $!\n";
while(<F>){
  my @col=(split /\s+/,$_)[3,4];
  s/(.*)\s+\d.*/$1 0.1/ if (abs($col[0] - $m4) < $e1)
                         ||
                         (abs($col[1] - $m5) < $e2);
  print ECRIRE;
}

close F;
__END__
merci lami20j, tout mes respect,
si vous souveniez du probléme, avant j avais besoin de copier 100 lignes d'un fichier et les mettres dans un autre, maintenant j ai besoin de mettre à jour mon premier fichier ça veut dire remplacer les anciens 100 lignes par les nouveaux (que je viens de calculer dans le fichier <fic_ecart>); vous pouvez m 'aider

merci d avance

CYG