Perl : inclusion de awk

Résolu/Fermé
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 - 10 févr. 2008 à 23:33
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 - 16 févr. 2008 à 23:19
Bonjour,

Je veux ecrire un script Perl qui liste les fichiers contenus dans un repertoire avec seulement trois champs. Mais ca ne fonctionne pas.

Si j'execute le script suivant, ca fonctionne (il liste tous les champs):

Script 1:

#!/usr/bin/perl
my $rep = "/media/sda5/Informatique/Test/Test_1";
chdir $rep;
my @ls = qx{ls -l $rep};
print "@ls\n";


-------------------------------------------------------------------------------------

Si je rajoute la commande awk, il y a une erreur qui apparait.

Script 2 :

#!/usr/bin/perl
my $rep = "/media/sda5/Informatique/Test/Test_1";
chdir $rep;
my @ls = qx{ls -l $rep | awk '{ print $5,$6,$8 }'};
print "@ls\n";


Resultat :

awk: line 1: syntax error at or near ,

Ou est le probleme?

Merci
A voir également:

14 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
11 févr. 2008 à 10:26
les variables awk sont prises pour des variables perl, et comme ça ? my @ls = qx{ls -l $rep | awk '{ print \$5,\$6,\$8 }'};
0
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 7
11 févr. 2008 à 19:43
Merci dubcek, je vais essayer cela dans les prochains jours. Trop occupé pour le moment... et pas chez-moi! Je t'en redonne des nouvelles.
Merci. :-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
11 févr. 2008 à 20:18
Salut,

pourquoi pas en Perl (vous que tu veux apprendre ;-)

lami20j@debserv:~/trash$ cat artagon.pl
#!/usr/bin/perl
use strict;use warnings;

my $rep="/home/lami20j/trash/c_exercices";
opendir REP,"c_exercices"
    or die "E/S :$!\n";

while(my $fic = readdir(REP)){
  next if $fic=~/^\.\.?$/;
  my @stat = (stat("$rep/$fic"))[7,9];
  my ($j,$m,$a) = (localtime($stat[1]))[3..5];
  printf "$stat[0] %04d-%02d-%02d $fic\n",$a+1900,$m+1,$j;
}
__END__
lami20j@debserv:~/trash$ perl artagon.pl
4096 2008-02-10 3
543 2008-02-10 functions_date.c
lami20j@debserv:~/trash$
et voici le résultat de la commande awk
lami20j@debserv:~/trash$ ls -l  c_exercices/| awk '{ print $5,$6,$8 }'

4096 2008-02-10 3
543 2008-02-10 functions_date.c

0
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 7
14 févr. 2008 à 20:48
Bonjour,

Finalement, je peux vous repondre ...trois jours apres. Excusez-moi du retard.

Premierement, dubcek ta commande marche tres bien.

Quant a toi, lami20j, tu as monte le degre de difficulte d'une coche (plutot de deux ... :-) ). Cependant, dans mon cas ca n'a pas fonctionne. Je n'ai change que le repertoire. Voici le fichier :

/Perl$ cat lami20j_3_champs.pl
#!/usr/bin/perl
use strict;use warnings;

my $rep="/media/sda5/Informatique/Test/Test_1";
opendir REP,"Test_1"
or die "E/S :$!\n";

while(my $fic = readdir(REP)){
next if $fic=~/^\.\.?$/;
my @stat = (stat("$rep/$fic"))[7,9];
my ($j,$m,$a) = (localtime($stat[1]))[3..5];
printf "$stat[0] %04d-%02d-%02d $fic\n",$a+1900,$m+1,$j;
}
__END__


et le resultat :

/Perl$ perl lami20j_3_champs.pl
E/S :No such file or directory


Le repertoire /media/sda5/Informatique/Test/Test_1 existe bel et bien.

Il va falloir que j'y aille bientot. Encore une fois...

Eh lami20j, est-ce que tu connais un operateur dans Perl qui allonge les journees de 6 heures. Je pourrais les consacrer a Perl ...

Merci a vous deux,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
14 févr. 2008 à 20:52
Salut,

Le repertoire /media/sda5/Informatique/Test/Test_1 existe bel et bien.
je n'ai pas dit le contraire ;-)

essaie
#!/usr/bin/perl
use strict;use warnings;

my $rep="/media/sda5/Informatique/Test";
opendir REP,"Test_1"
or die "E/S :$!\n";

while(my $fic = readdir(REP)){
next if $fic=~/^\.\.?$/;
my @stat = (stat("$rep/$fic"))[7,9];
my ($j,$m,$a) = (localtime($stat[1]))[3..5];
printf "$stat[0] %04d-%02d-%02d $fic\n",$a+1900,$m+1,$j;
}
__END__ 
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
14 févr. 2008 à 21:01
qui allonge les journees de 6 heures

je ne comprends pas ta question
0
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 7
14 févr. 2008 à 21:23
Non lami20j. ca ne fonctionne pas non plus.

A propos del'operateur : les journees ont 24 heures. Est-ce que tu connais un operateur de Perl qui les allongeraient jusqu'a 30 heures... il ne faut pas me prendre toujours au serieux ... ;-)

Je dois quitter pour aller travailler.

Je vais regarder ta reponse demain si possible

Salut et merci,
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
14 févr. 2008 à 21:32
alors affiche le résultat de

#!/usr/bin/perl
use strict;use warnings;

my $rep="/media/sda5/Informatique/Test";
opendir REP,"Test_1"
or die "E/S :$!\n";

while(my $fic = readdir(REP)){
  next if $fic=~/^\.\.?$/;
  print "$rep/$fic\n";
  #my @stat = (stat("$rep/$fic"))[7,9];
  #my ($j,$m,$a) = (localtime($stat[1]))[3..5];
  #printf "$stat[0] %04d-%02d-%02d $fic\n",$a+1900,$m+1,$j;
}
__END__ 
0
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 7
16 févr. 2008 à 22:43
Salut lami20j,

J'ai essaye ton script soit :

#!/usr/bin/perl
use strict;use warnings;
my $rep="/media/sda5/Informatique/Test";
opendir REP,"Test_1"
or die "E/S :$!\n";
while(my $fic = readdir(REP)){
next if $fic=~/^\.\.?$/;
print "$rep/$fic\n";
}
__END__


et ca donne toujours le meme resultat, soit E/S :No such file or directory.

J'ai observe que le mot REP apparait en noir ordinaire. Habituellement, Kate colorie les caracteres qui font partie d'un mot cle ou d'une variable. Par exemple, dans ton script print est en bleu, my en noir fonce, or en vert, $rep en brun. Ce n'est pas le cas ici. En principe, ca devrait ...

Donc, je crois que Perl ne reconnait pas REP. Est-ce que REP est-un mot cle du langage ou une variable? Tu as defini $rep et non $REP.

Merci, Aujourd'hui, j'ai finalement du temps ... :-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 févr. 2008 à 22:47
Salut,

essaie
#!/usr/bin/perl
use strict;use warnings;
my $rep="/media/sda5/Informatique/Test";
opendir REP,"Test"
or die "E/S :$!\n";
while(my $fic = readdir(REP)){
next if $fic=~/^\.\.?$/;
print "$rep/$fic\n";
}
__END__ 


REP et $rep ne se réfère pas à la même chose ;-)
0
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 7
16 févr. 2008 à 23:01
Toujours la meme chose ...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 févr. 2008 à 23:08
affiche
ls -l /media/sda5/Informatique/Test
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 févr. 2008 à 23:11
en fait je pense qu'à l'exécution de script tu n'est pas dans
/media/sda5/Informatique/Test

donc essaie
#!/usr/bin/perl
use strict;use warnings;
my $rep="/media/sda5/Informatique/Test";
opendir REP,"$rep"
  or die "E/S :$!\n";

while(my $fic = readdir(REP)){
  next if $fic=~/^\.\.?$/;
  print "$rep/$fic\n";
}
__END__ 
0
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 7
16 févr. 2008 à 23:19
Cela a fonctionne cette fois-ci. Effectivement, je mets mes scripts dans un seul repertoire. Je ne veux pas les eparpiller un peu partout. En principe, ca devrait etre la bonne facon de proceder mais j'aurais du le specifier avant ...

Merci lami20j,
0