Chercher une chaine avec awk dans un fichier

Fermé
sam - 13 févr. 2008 à 10:55
 sam - 13 févr. 2008 à 17:16
Bonjour,
Mon problème est comme suit :
J'ai un fichier "test" dans lequel je voudrai chercher une chaine exacte entrée par l'utilisateur .
Le fichier test est comme suit :
ch=a.chaine1,b.chaine2
ch1=a.chaine1,b.chaine2
ch2=c.chaine3
ch3=a.chaine4,b.chaine5,chiane6
etc...

Le script doit pouvoir localalisée par ex la chaine "chaine1" ou "chaine3" entrée par l'utilisateur et l'afficher entièrement "a.chaine1" ou encore "c.chaine3".
Si l'utilisateur entre par exemple "chai" le script rend une réponse négative.

Merci d'avance
A voir également:

25 réponses

Pardon, la valeur de retour que je veux est le "n" fois:
# cat ccm.sh
#!/bin/sh

perl /home/lami20j/ccm.pl $1
si "n" = 0 alors
"traitement"
sinon
"traitement
fin si
0
Il y a aussi un problème au niveau de la recherche :(
si jamais l'utilisateur entre "ch" il faudrait que la valeur de retour de "n" soit 0 et non pas 5 :(
ch trouvé 5 fois
Il faut que le script charche la chaine entière comme je l'ai dis dans mes premiers mails.
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 févr. 2008 à 16:53
Voilà
root@debian:~# cat fic
ch=a.chaine1,b.chaine2
ch1=a.chaine1,b.chaine2
ch2=c.chaine3
ch3=a.chaine4,b.chaine5,chiane6
etc...

root@debian:~# cat ccm.pl
#!/usr/bin/perl
use strict;use warnings;

my %h;
my $ch = shift @ARGV;
while(<>){
  next unless /(\w*\.*$ch)/;
  $h{$1}++;
}
print values %h;
__END__
root@debian:~# cat ccm.sh
#!/bin/sh

echo -e "Entrez la chaine a chercher : \c"
read ch
var=$(perl /home/lami20j/ccm.pl $ch $1)

if [ -z $var ]
then
echo "NULL"
else
echo $var
fi

root@debian:~# sh ccm.sh fic
Entrez la chaine a chercher : chaine1
2
root@debian:~# sh ccm.sh fic
Entrez la chaine a chercher : divers
NULL
root@debian:~#
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 févr. 2008 à 16:57
le script shell
#!/bin/sh

echo -e "Entrez la chaine a chercher : \c"
read ch
var=$(perl /home/lami20j/ccm.pl $ch $1)

if [ -z $var ]
then
echo "NULL"
else
echo $var
fi
le script perl
#!/usr/bin/perl
use strict;use warnings;

my %h;
my $ch = shift @ARGV;
while(<>){
  next unless /(\w*\.$ch)\b/;
  $h{$1}++;
}
print values %h;
__END__
le résultat
root@debian:~# sh ccm.sh fic
Entrez la chaine a chercher : chaine1
2
root@debian:~# sh ccm.sh fic
Entrez la chaine a chercher : chaine10
NULL
root@debian:~# sh ccm.sh fic
Entrez la chaine a chercher : ch
NULL
root@debian:~#

0

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

Posez votre question
Voici le résultat d'execution que j'obtiens.

Entrez la chaine a chercher : chai
pp[8]: test: 0403-004 Spécifiez un paramètre avec cette commande.

[]>sh pp _tmp
Entrez la chaine a chercher : chaine3
1
[]>sh pp _tmp
Entrez la chaine a chercher : chiane9
pp[8]: test: 0403-004 Spécifiez un paramètre avec cette commande.


Merci d'avance pour ton lamij, je t'ai pas mal dérangé, j'en suis désolé mais je ne connais pas perl :(
0