Aide pour comprendre un script

Aide pour comprendre un script - Shell/Batch - Programmation

Marsh Posté le 18-03-2008 à 16:29:51    

Bonjour,
 
Voilà je dois réécrire un script ksh en perl.
 
Mais je bloque sur cette fonction :
 
make_txt()
{
rm -f $rep/*.txtfor i in `ls $rep/*.trc`dofile=`echo $i | awk -F. '{print $1}'`tkprof $file.trc $file.txt sys=nodone
}
 
J'ai du mal à comprendre tout ce qu'elle fait... :pt1cable:

Reply

Marsh Posté le 18-03-2008 à 16:29:51   

Reply

Marsh Posté le 18-03-2008 à 16:34:02    

je transfère dans la catégorie programmation plus approprié :o


---------------
Intermittent du GNU
Reply

Marsh Posté le 18-03-2008 à 16:34:28    

Ce sujet a été déplacé de la catégorie OS Alternatifs vers la categorie Programmation par Mikala


---------------
Intermittent du GNU
Reply

Marsh Posté le 25-03-2008 à 14:23:10    

il ne manquerait pas qq espaces?

Code :
  1. make_txt()
  2. {
  3.     rm -f $rep/*.txt
  4.     for i in `ls $rep/*.trc`do
  5.         file=`echo $i | awk -F. '{print $1}'
  6.         tkprof $file.trc $file.txt sys=no
  7.     done
  8. }


Bah c'est pas très compliqué :
 
je vire tous les fichiers txt de $rep
ensuite, pour chaque fichier trc :

  • je récupère le nom de fichier sans l'extension trc dans la variable $i (tous de qui se trouve entre le début et le 1er "." )
  • ensuite j'appelle la commande tkprof avec le nom de fichier précédemment calculé


Truc bizarre, pour pour il manque des $rep pour la command tkprof...
 
Sinon pour le portage en perl,
- la fonction glob est ton ami
- foreach aussi
- les regexp aussi
- system aussi...
 
Bon courage...
 

Reply

Marsh Posté le 25-03-2008 à 15:30:10    

Oui désolé pour les espaces j'ai découvert cela aussi après, et tout de suite c'est plus clair!...  :sleep:  
 
Pour la suppression j'ai fait ca :
 

Code :
  1. my $succes = unlink glob "$rep/*.txt";
  2. print "$succes fichier(s) supprimé(s).\n";


 
Après je comptais bien utiliser la fonction system en mettant en argument la boucle for mais apres pour le reste cela ce complique un peu trop pour moi...  :(

Reply

Marsh Posté le 26-03-2008 à 16:23:04    

Je suis arrivé à cela :
 
[cpp]
my @fichiers = lister_traces($rep);
 
sub lister_traces
{
  opendir (DIR, $rep)
    or die "impossible d'ouvrir le repertoire $rep\n";
  my @file_rep = grep { /\.trc$/} readdir(DIR);
  closedir (DIR);
 
  foreach my $nom (@file_rep)
  {
    system `tkprof $nom.trc $nom.txt sys=no`;
  }
  return @fichiers;
}
 
J'ai deux petits soucis :
 
Comment faire pour que $nom contienne le chemin complet + le fichier et sans le .trc si possible : obtenir quelque chose comme cela par exemple /save/udump/traces/exemple


Message édité par doog77 le 26-03-2008 à 16:26:59
Reply

Marsh Posté le 26-03-2008 à 23:14:48    

tu n'es pas obligé d'utiliser open dir, glob fonctionnera aussi, et tu obtiendras en plus le chemin complet...
 
Ensuite, vu que glob aura matché l'ensemble des fichiers "valides", tu peux réécrire en une ligne avec la fonction map

Code :
  1. my @filenames_cleaned = map { s/\.trc$//} glob("$rep/*.trc" );


 
Voilà voilà

Reply

Marsh Posté le 28-03-2008 à 17:42:53    

Merci beaucoup cela fonctionne parfaitement.  
J'ai juste du rajouter $_ car sinon il me retournait le chiffre 1 pour chaque substitution effectuées.
 

Code :
  1. my @file_rep = map { s/\.trc$//;$_;} glob("$rep/*.trc" );

Reply

Marsh Posté le 01-04-2008 à 22:45:40    

Ouupss exact desolé pour la boulette

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed