Chercher une chaine avec awk dans un fichier
sam
-
sam -
sam -
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
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:
- Chercher une chaine avec awk dans un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
25 réponses
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; print "Entrez la chaine à chercher : "; chomp(my $ch = <STDIN>); while(<>){ next unless /(\w*\.*$ch)/; $h{$1}++; } print keys %h," trouvé ",values %h," fois\n"; __END__ root@debian:~# perl ccm.pl fic Entrez la chaine à chercher : chaine1 a.chaine1 trouvé 2 fois root@debian:~#
Salut,
Pourquoi avec "awk" ? Un simple "grep" devrait suffire, non ?
La recherche doit renvoyer que la chaine de caractères (avec les 2 caractère précédents) ou la ligne entière ?
Pourquoi avec "awk" ? Un simple "grep" devrait suffire, non ?
La recherche doit renvoyer que la chaine de caractères (avec les 2 caractère précédents) ou la ligne entière ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questiongrep -o ".\.chaine3" fichier grep -o ".\.chaine3" fichierEt en application :
ssh$ cat plop ch=a.chaine1,b.chaine2 ch1=a.chaine1,b.chaine2 ch2=c.chaine3 ch3=a.chaine4,b.chaine5,chiane6 ssh$ var="chaine3" ssh$ grep -o ".\.${var}" plop c.chaine3;-))
Le grep -o n'existe pas sur aix :(
il n'y a que le grep -w mais qui retourne l'ensemble de la ligne :(
il n'y a que le grep -w mais qui retourne l'ensemble de la ligne :(
Salut,
voilà, mais ce n'est pas efficace tant qu'on ne connais pas exactement la structure complète de ton fichier
la chaîne à récupérée a toujours le format
LETRRE.chaineNUMERO ?!
voilà, mais ce n'est pas efficace tant qu'on ne connais pas exactement la structure complète de ton fichier
la chaîne à récupérée a toujours le format
LETRRE.chaineNUMERO ?!
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:~# grep -Eo '[a-zA-Z]\.chaine1' fic a.chaine1 a.chaine1 root@debian:~#
Je suis désolé mais ça ne marche pas.
Voici le résultat d'execution sur le fichier fic :
grep -E "[a-zA-Z]\.chaine1" fic
résultat :
ch=a.chaine1,b.chaine2
ch1=a.chaine1,b.chaine2
Le paramètre "o" n'existe pas pour grep sur aix
Voici le résultat d'execution sur le fichier fic :
grep -E "[a-zA-Z]\.chaine1" fic
résultat :
ch=a.chaine1,b.chaine2
ch1=a.chaine1,b.chaine2
Le paramètre "o" n'existe pas pour grep sur aix
Ben désolé, tu ne l'avais pas spécifié aussi...
En plus je me suis aperçu qu'il manquait le paramètre "\b" à l'expression pour quelle soit exacte :
;-))
En plus je me suis aperçu qu'il manquait le paramètre "\b" à l'expression pour quelle soit exacte :
grep -o ".\.chaine3\b" fichierEssaye avec "perl" alors comme suggéré par" lami20j".
;-))
Pour l'instruction perl, elle ne répond pas à ma question dans la mesure où elle délimite la chaine à rechercher avec "=" et "," alors qu'il y a d'autres chaine qui sont délimitées par "=" et la fin de la ligne. En plus elle affiche le premier paramètre $1!!!
Justement j'ai dit dans mon message qu'on a besoin de la structure de ton fichier
http://www.commentcamarche.net/forum/affich 5010161 chercher une chaine avec awk dans un fichier#7
On ne peux pas deviner ce que ton fichier contient
http://www.commentcamarche.net/forum/affich 5010161 chercher une chaine avec awk dans un fichier#7
On ne peux pas deviner ce que ton fichier contient
mon fichier c'est exactement ce que je vous ai lister :
ch=a.chaine1,b.chaine2
ch1=a.chaine1,b.chaine8
ch2=c.chaine3
ch3=a.chaine4,b.chaine5,chiane6
ch4=a.chaine4,b.chaine8,chiane9
en changeant juste les noms c tout!
ch=a.chaine1,b.chaine2
ch1=a.chaine1,b.chaine8
ch2=c.chaine3
ch3=a.chaine4,b.chaine5,chiane6
ch4=a.chaine4,b.chaine8,chiane9
en changeant juste les noms c tout!
Merci lami20j :)
le script marche bien. Cependant, je voudrais faire appel à ce script perl à partir de mon script korn shell et pour ce je voudrai une valeur de retour pour savoir si l'élément entré par l'utilisateur a été trouvé ou non.
Comment faire sachant bien que je ne connais pas perl du tout :(
le script marche bien. Cependant, je voudrais faire appel à ce script perl à partir de mon script korn shell et pour ce je voudrai une valeur de retour pour savoir si l'élément entré par l'utilisateur a été trouvé ou non.
Comment faire sachant bien que je ne connais pas perl du tout :(
par exemple
root@debian:~# cat ccm.sh #!/bin/sh perl /home/lami20j/ccm.pl $1 root@debian:~# sh ccm.sh fic Entrez la chaine à chercher : chaine1 a.chaine1 trouvé 2 fois root@debian:~#
Non, c pas l'appel du script shell! ça je sais faire :)
Je voudrai la valeur de retour à savoir "a.chaine1".
Je voudrai la valeur de retour à savoir "a.chaine1".
Moi ce que je veux c intercepter cette valeur. çàd que lorsque je ferai appel à mon script perl il va me retourner "a.chaine1 trouvé 2 fois " mais moi je veux que ça soit dans une variable que je testerai au niveau de mon script ksh.
Exemple:
# cat ccm.sh
#!/bin/sh
perl /home/lami20j/ccm.pl $1
si "valeur de retour" = null alors
"traitement"
sinon
"traitement
fin si
Exemple:
# cat ccm.sh
#!/bin/sh
perl /home/lami20j/ccm.pl $1
si "valeur de retour" = null alors
"traitement"
sinon
"traitement
fin si