Pages : 1
#1 Le 09/11/2008, à 10:58
- mezhoud
[Résolu]script-sélection de ligne
Bonjour les meilleurs,
Ce script me permet de Sélectionner toutes les lignes qui commencent par "Query" et la première ligne après "Query" qui commence par "dip":
awk ' /^Query=/ {query=$0;next} /^dip:/ { if (query != "") { print query;print;query=""}}' <nom_fichier> > <fichieroutput>
Tout ce que je veux c'est de faire tout cela si la ligne commencant pas "dip" contient la chaine de caractères suivantes: '*e-**'
Voilà
merci beaucoup
Dernière modification par mezhoud (Le 10/11/2008, à 14:11)
Hors ligne
#2 Le 09/11/2008, à 13:20
- Totor
Re : [Résolu]script-sélection de ligne
Salut,
J'ai retrouvé ton ancien post afin d'avoir un exemple de contenu de fichier source. Ce que j'en déduis, c'est que *e-** correspond à une expression et non à une suite de caractères. Si je ne me trompe pas, l'expression est plus précisément un chiffre suivi de la lettre "e", puis d'un tiret et enfin de 2 chiffres qui terminent la ligne. C'est à dire : [0-9]e-[0-9][0-9]$
Le script devient donc :
awk ' /^Query=/ {query=$0;next} /^dip:*[0-9]e-[0-9][0-9]$/ { if (query != "") { print query;print;query=""}}' <nom_fichier> > <fichieroutput>
-- Lucid Lynx --
Hors ligne
#3 Le 09/11/2008, à 13:41
- Alain.g
Re : [Résolu]script-sélection de ligne
Bonjour
* est le quantificateur de l'élément qui le précède. Donc "dip:*" signifie dip suivi de zéro, un ou plusieurs deux-points.
Il faut donc placer un joker avant : dip:.*
Xubuntu Karmic !
Hors ligne
#4 Le 09/11/2008, à 13:53
- Totor
Re : [Résolu]script-sélection de ligne
Bonjour
* est le quantificateur de l'élément qui le précède. Donc "dip:*" signifie dip suivi de zéro, un ou plusieurs deux-points.
Il faut donc placer un joker avant : dip:.*
c'est loin d'être faux
-- Lucid Lynx --
Hors ligne
#5 Le 09/11/2008, à 14:51
- mezhoud
Re : [Résolu]script-sélection de ligne
Bonjour , meric pour votre coopération,
OUi M. Totor c'est bien le type de fichier que j'ai posté auparavant. je vous juste raffiner le script de tel sorte il devient plus intelligent.
Voici le but:
les valeurs 5e-7 par exemple sont des scores exprimés en exponentiel. Si le score est supérieur à e-5 (e-4, e-3, 5e-5 par exemple) alors le résultat n'est pas bon.
dans le premier script, on récupére le Query Gi|..... et la meilleur score. C'est tout.
Mais il se peut que le meilleur score soit supérieur au seuil... Donc je doit les éliminer.
Est t il compréhensible??:rolleyes:
Merci beaucoup
Hors ligne
#6 Le 09/11/2008, à 15:47
- Totor
Re : [Résolu]script-sélection de ligne
le seuil e-5 est-il fixe ? Dépend t'il du "Query" ?
-- Lucid Lynx --
Hors ligne
#7 Le 09/11/2008, à 16:04
- mezhoud
Re : [Résolu]script-sélection de ligne
Le seuil est fixe.
oui il dépend de Query. puisque le score interprêtre la ressemblance de la chaine de caractère query à celle de DIP.
Merci
Hors ligne
#8 Le 09/11/2008, à 21:54
- Totor
Re : [Résolu]script-sélection de ligne
désolé mais je ne comprend pas trop "le seuil est fixe mais il dépend du Query .... "
S'il il dépend de query, il ne peut être fixe.
Je comprend qu'il soit fixe pour une "Query" donnée mais s'il dépend d'une "Query", il ne peut être fixe pour toutes les Query...
Et puis, quel est le résultat final exacte attendu ?
pour une Query, avoir toutes les lignes "dip" ayant un "scrore" inférieur ou égale au seuil max ?
Où est définit le seuil max pour une Query ?
-- Lucid Lynx --
Hors ligne
#9 Le 09/11/2008, à 22:48
- mezhoud
Re : [Résolu]script-sélection de ligne
Désolé moi aussi j'ai pas bien compris ta question. tu parlais language informaticien ou ordinaire.
Donc je reprends:
le seuil est fixe mais si tu voix dans l'ancien post http://forum.ubuntu-fr.org/viewtopic.php?id=256541, les valeurs changent dans chaque ligne.
But,
Je ne veux pas récupérer les lignes qui ont une valeur supérieur à e-5. tout simplement en gardant le script précédent.
Merci infinément
Hors ligne
#10 Le 10/11/2008, à 00:02
- Totor
Re : [Résolu]script-sélection de ligne
Bon alors, j'avoue que tu m'a fait chercher un peu car il m'a fallu transformer la ligne pour pouvoir effectuer des comparaisons numériques
Si j'ai bien compris, ceci devrait répondre à ton besoin :
awk ' BEGIN {seuil=exp(-5)} /^Query=/ {query=$0;next} /^dip:.*[0-9]*e-[0-9]*$/ { if (query != "") { nb=split($NF,expo,"e"); if (expo[1]=="") {valeur=exp(expo[2])} else {valeur=expo[1]*exp(expo[2])};if (seuil >= valeur) { print query;print;query=""}}}' <nom_fichier> > <fichieroutput>
-- Lucid Lynx --
Hors ligne
#11 Le 10/11/2008, à 14:10
- mezhoud
Re : [Résolu]script-sélection de ligne
Salut,
BRAVO BRAVO BRAVO.
ça marche
Tu es le meilleur
cordialement,
Hors ligne