Awk-perl

Résolu/Fermé
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 - 6 avril 2009 à 16:20
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 - 6 mai 2009 à 16:54
Bonjour,
j'ai un fichier hexadécimal le séparateur de chaque mot hexa et "|"
je voulais extraire des mots specifiques

en fait, c'est fichier tres long qui ressemble a celui de Wireshark l'or d'un enregistrement *.txt

je voulais tester $44

cat /home/../Bureau/hexa.txt | awk -F| `BEGIN {NR=4; int Nseq=0;int num=0;}
{

if( $44!="60")
{num = NR; Nseq =strcat($45,$46); NR=NR+32;}

else
{num = NR; NR=NR+33;}
}
END {print num " " Nseq}`>>/home/../Bureau/rtp.txt

ce code je veux l'introduire dans le script perl
puis-je le faire et comment ?
y a t-il des fautes dans ce bout de code svp?
merci bcp
A voir également:

75 réponses

karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
10 avril 2009 à 12:41
j'ai parcouru le tableau fec et j'ai fait une condition
si $fec[$i=1]-$fec[$i] == 33 car je cherche le premier saut de 33 pas car le tableau contient des numero consecutive et puis il fait un saut de 33 chaque fois
expl @fec: [1,2,3,4,5,6,7,8,41,42,43,44,45,46,47,48,81,82....]

j'ai mis [1,41,81...] dans un tableau que j'ai appeler @A se sont les tetes de Matrice

j'ai initialiser une valeur $SNBL = $A[5] ==> je vais prendre une tete de matrice quelquonque du tableau @A

maintenant je veux parcourir le tableau @rtp et chercher dans sont contenu une valeur egale a $A[5]
il va le trouver surement
mais je veux avoir dans un dernier tableau resultat toutes les valeurs allant de $SNBL jusqu'a $SNBL+39
ce tableau contient tout les elements de la matrice rtp mais a cette matrice on va trouver aussi 8 ou plus rtp perdus
normalement je vais trouver 32 valeurs mais pas toujours
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 569
10 avril 2009 à 14:33
Re,

Ben, il suffit de prendre des tranches de tableaux en ce cas.

Il suffit de faire par exemple
my @test = @A[$NBL .. ($NBL+39)];
--
106485010510997108
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 569
10 avril 2009 à 17:50
Re,

Si j'ai bien compris c'est ça que tu veux (le résultat en gras)
lami20j@debian:~$ cat tranche.pl
#!/usr/bin/perl
use strict;use warnings;

my @fec=(1,2,3,4,5,6,7,8,41,42,43,44,45,46,47,48,81,82,83,84,85,86,87,88);

my $test=41;
my $i;
foreach (@fec){
        ++$i;
        last if($_==$test);
}
my @control=@fec[--$i .. $i + 7];
print "@control\n";
__END__
lami20j@debian:~$ perl tranche.pl
41 42 43 44 45 46 47 48
lami20j@debian:~$
0
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
11 avril 2009 à 07:58
nn c'est presque
mais je voudrai avoir : 41 42 43 44 45 46 47 48...79 du tableau @rtp
c'est a dire du [41 a 41+39]
malgre qu'il y a des numero dans ce intervall qui n'existe pas (8 numero perdu ou plus parfois)
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 569
11 avril 2009 à 08:06
Salut,

mais je voudrai avoir : 41 42 43 44 45 46 47 48...79 du tableau @rtp
c'est a dire du [41 a 41+39]


Qui ou quoi t'empêche de prendre mon exemple et faire (au lieu de @fec, tu mets @rtp)
@rtp[--$i .. $i + 38];
?!!
0
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
13 avril 2009 à 15:07
GTK2 est mon bibliotheque graphique de perl


j'ai remarqué que perl n'accepte pas cette instruction : $label$i
en fait je suis entrain de construire des label dynamiquement a l'aide d'une boucle for
mais je rencontre une erreur de compilation
0
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
13 avril 2009 à 15:30
ou bien autrement :
supposant j'ai ce tableau : 1,2,3,7,8,12
je veux avoir un tableau comme ca 1,2,3,0,0,0,7,8,0,0,0,12
le contenu du tableau est trié deja
et je veux avoir au lieu des numeros perdus des zeros
0
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
13 avril 2009 à 15:51
s'il te plais Mr Lami je te jure que c'est tres urgent!!
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 569
13 avril 2009 à 16:40
Salut,

J'en suis sûr que c'est urgent. Toutefois avec une telle invocation, tu risques plutôt de ne pas avoir une réponse.
N'oublie pas que nous sommes de bénévoles, et chacun a aussi une vie à côté.

Tu as vraiment de la chance d'avoir la réponse assez rapidement.
lami20j@debian:~$ cat tableau_zero.pl
#!/usr/bin/perl
use strict;use warnings;

my $i;
my @tab=(1,2,3,7,8,12,20,24,29);
my @res=push my @tmp,shift @tab;

while(@tab){
  push @tmp,(my $e=shift @tab);
  my $decalage = ($e - $tmp[$i++]);
  if($decalage>1){push @res,0 for 1..$decalage - 1}
  push @res,$e;
}
@tmp=();
print "@res\n";
__END__
lami20j@debian:~$ perl tableau_zero.pl
1 2 3 0 0 0 7 8 0 0 0 12 0 0 0 0 0 0 0 20 0 0 0 24 0 0 0 0 29
0
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
13 avril 2009 à 18:06
merci infinement

tu es genial Mr Lami
et je m'excuse , je sais que je t'ai dérangé pas mal de fois
et c'est grace a dieu qui m'a offert une telle personne geniale et gentille pour m'aider et pour me permettre de terminer cette tache.

merci bcp mille fois
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 569
14 avril 2009 à 14:10
Salut,

Je n'ai pas trop aimé la 1ère version.
Voici une autre aproche (merci à jipicy pour les tests
lami20j@debian:~$ cat tableau_zero2.pl
#!/usr/bin/perl
use strict;use warnings;

my @tab=(1,2,3,7,8,12,20,24,29);
my @res=(0) x $tab[$#tab];

$res[$_-1]=$_ for @tab;
print "@tab\n";
print "@res\n";
lami20j@debian:~$ perl tableau_zero2.pl ro2.pl
1 2 3 7 8 12 20 24 29
1 2 3 0 0 0 7 8 0 0 0 12 0 0 0 0 0 0 0 20 0 0 0 24 0 0 0 0 29
0
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
21 avril 2009 à 18:14
salut Mr Lami pouvez vous m'aider une derniere fois ?

j'ai deux tableaux
exp
@a=(1,2,3,4,5,6,7,8,9,10)
@b=(3,5,6,7)

je veux eliminer le contenu de @b du @a

c a d @a doit contenir @a=(1,2,4,8,9,10)
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 569
21 avril 2009 à 18:30
Salut,

une derniere fois ?
Si je comprends bien, si jamais tu as encore de questions je ne te répondrai plus. ;-DDDDD
lami20j@debian:~/trash/ccm_perl$ cat ccm_que_dans_a.pl
#!/usr/bin/perl
use strict;use warnings;

my (@a,@b,@que_dans_a,%dans_b);
@a=(1,2,3,4,5,6,7,8,9,10);
@b=(3,5,6,7);
@dans_b{@b}=();

for(@a){push @que_dans_a,$_ unless exists $dans_b{$_}};
print "@a\n@b\n";
print "@que_dans_a\n";
__END__
lami20j@debian:~/trash/ccm_perl$ perl ccm_que_dans_a.pl
1 2 3 4 5 6 7 8 9 10
3 5 6 7
1 2 4 8 9 10
0
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
21 avril 2009 à 19:21
my (@mat_ERR, %dans_sans_err);

@dans_sans_err{@num_Mat_sans_err}=();

for (@num_Mat_errAA){push @mat_ERR, $_ unless exists $dans_sans_err{$_}};

print"@mat_ERR\n";


il m'a donner un resultat inverse je sais pas pourquoi
sachant que @a=@num_Mat_errAA et @b=@dans_sans_err


merci Mr mais je t'ai déranhé énormement
t'es tres tes gentil
Merci bcp
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 569
21 avril 2009 à 19:56
Re,

Attention, @b c'est @num_Mat_sans_err

@dans_sans_err n'est pas un tableau. En revanche on a le hash %dans_sans_err

Bref,

@a il faut le remplacer avec @num_Mat_errAA
@b il faut le remplacer avec @num_Mat_sans_err

Donc les tableau que tu compares sont

@num_Mat_errAA et @num_Mat_sans_err

et pas

@num_Mat_errAA et @dans_sans_err
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 569
21 avril 2009 à 19:59
Re,

Pour vérifier il suffit d'afficher les tableaux
print "@num_Mat_errAA\n";
print "@num_Mat_sans_err\n";
print "@mat_ERR\n";
0
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
22 avril 2009 à 15:20
salut Mr Lami
merci pour la reponse d'hier j'été trop fatigué c'est pourquoi il m'a paru que les resultats sont fausse mais j'ai mis le bon code dés le début.

j'ai un probleme Mr
supposons que j'ai un tableau
my @Tfin=(1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50,51,52,0,0,55,56,57,58,59,60,61,62,63,0,0,0,0,0,0,0,0,72,73,74,75,76,77,78,79,80);

je vais analyser 40 element par 40 a part : (analyser le tableau du [1 .. 40] puis [41..80]...)

je trouve 8 et seulement 8 zeros consécutives dans chaque 40 elements on affecte a un autre tableau un numero d'indice de sous tableau expl: pour les 40 premiere leurs indice est 40/40=1 , le deuxieme 80/40=2, ...

ici le premier sous tableau est faux car on a seulement 8 zeros consecutives
tandisque le deuxieme sous tableau est vrai car il possedes 8 zero consécutives + 2 autres zero

je sais que je m'exprime mal mais si jamais vous avez besoin d'une information
please n'hesitez pas
je vous en pris Mr
Merci infinement
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 569
22 avril 2009 à 17:13
Salut,

Tu veux faire quoi?
Afficher faux quand il y a seulement 8 zéros et vrai quand il plus de huit zéros?
lami20j@debian:~/trash$ cat vraifaux.pl
#!/usr/bin/perl
use strict;use warnings;

my @Tfin=(1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,18,19,
          20,21,22,23,24,25,26,27,28,29,
          30,31,32,33,34,35,36,37,38,39,
          40,41,42,43,44,45,46,47,48,49,
          50,51,52,0,0,55,56,57,58,59,
          60,61,62,63,0,0,0,0,0,0,0,0,
          72,73,74,75,76,77,78,79,80);

print "FAUX\n" if (scalar grep { /^0$/ } @Tfin[0 .. 39]) == 8;
print "VRAI\n" if (scalar grep { /^0$/ } @Tfin[40 .. 79]) == 10;
__END__
lami20j@debian:~/trash$
lami20j@debian:~/trash$ perl vraifaux.pl
FAUX
VRAI
0
karim_khouja Messages postés 50 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 16 février 2010 3
22 avril 2009 à 17:41
non quand il y a 8 zero et les zero sont consécutives afficher faut
exemple :
1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 faut
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,0,0,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 faut
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,0,0,0,0,0,0,0,0 faut

la position n'importe mais les zeros doit etre 8 et consecutives

merci bcp
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 569
22 avril 2009 à 17:45
Re,

Je ne comprends pas.
Montre ton exemple sur le tableau que tu m'as donné.
my @Tfin=(1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,18,19,
          20,21,22,23,24,25,26,27,28,29,
          30,31,32,33,34,35,36,37,38,39,
          40,41,42,43,44,45,46,47,48,49,
          50,51,52,0,0,55,56,57,58,59,
          60,61,62,63,0,0,0,0,0,0,0,0,
          72,73,74,75,76,77,78,79,80);

0