Grep? awk?(resolu) => Pb sur l'expression reguliere [RESOLU] - Linux et OS Alternatifs
Marsh Posté le 09-08-2004 à 11:01:06
En fait, mes séquences que je recherche sont du style:
(tout sauf 252 ou 25) espace 253
OU
15 espace (tout sauf 15)..
J'ai trouve un programme, amsi j'ai encore quelques problemes:
#!/bin/sh
# appel a la fonction: ./grep.sh a nom_fichier le a pouvant etre remplace par n'importe quoi, cpour remplir...
pattern=$1
shift
awk '{ str=$0; value=0; while (pos = match(str,/\<[^252][^0-9]253\>/)) {
size = RSTART + RLENGTH
str=substr(str, RSTART + RLENGTH)
pos += value
print FNR ":" pos ":" $0
value += RSTART + RLENGTH - 1
}
}' $@
mais quand je le alnce sur un fichier test, il ne me reconnait aps les 253 253 qui sont aussi une erreur...
[calcul@PC82 Adaptation]$ ./rech_test.sh a test_luz
2:1:3 253 253 6 253 253
2:11:3 253 253 6 253 253
6:4:10 6 253
8:1:8 253 253
Ici par exemple il ne tient pas compte du 252 suivi de 253, or 253 /= 253, non?
Si vous avez une idee d'ou ca vient, merci de me le dire!
Marsh Posté le 09-08-2004 à 11:41:35
marionnet' a écrit : En fait, mes séquences que je recherche sont du style: |
ton match doit trouver: 26espace253, 01espace253, espaceespace253
mais ne doit pas ressortir : 252espace253 ni 25espace253 ?
c'est cela ?
Marsh Posté le 09-08-2004 à 11:54:49
Pourquoi [^0-9] alors que tu sais que tu veux un espace à cet endroit ?
Marsh Posté le 09-08-2004 à 12:18:53
Mes lignes sont composees de nombres intercales d'esapce.
Mon match doit ressortir:
26 253, 253 253 (j'ai du mal avec celui la...) 251 253, 3 253, mais ne doit pas me donner 25 253 ou 252 253 .
En ce qui concerne le [^0-9], c'est aprce que la fonction /s ne marchait pas, mais j'ai trouve [[blank:]] qui marche donc c bon. Et en fait ej viens de retester /s et ca marche aussi... Comme quoi...
Par contre, je trouve toujours pas de solution pour mon expression reguliere, je fais plein de test ^(25|251)$\s252, mais niet..
Alors vos réponses sont les bienvenues, merci!
Marsh Posté le 20-08-2004 à 15:48:26
Bonjour,
J'ai reussi a ameliorer mon petit programme(fourni par qqn, merci ;-)), maintenant il me refile l'annee. Pour les regexp, c pas encore trop ca, mais je crois que c bon, Cependant, si vous avez encore une idee, y a no pb. Je vous laisse mon code au cas ou ca interesse quelqu'un
Voici un extrait de mon jeu de donnees:
Code :
|
Je cherche toutes les sequences qui ne respectent pas 251 252 253 254, ou 37 20 20 10, et apres certaines valeurs je ne dois pas en avoir d'autres (assez complexes comme conditions...)
Voici le programme que j'ai actuellement et qui a l'air en fait de fonctionner maintenant:
Code :
|
J'effectue un tri apres sur les lignes.
Voila si vous avez qqch de plus court, ou que vous voyez des erreurs n'hésitez pas à me le dire!
Merci,
A+
Marsh Posté le 06-08-2004 à 09:58:59
Bonjour,
J'ai un fichier de plusieurs lignes, dans lesquelles je recherche une sequence d'erreur. En plus d'avoir le numero de la ligne fourni par grep
(jusqu'à maintenant je fais:
grep -nE -i ' 15 40 ' assol_codes.csv >> erreur.out )
je voudrais avoir le numero de la colonne ou se trouve la sequence recherchee. Faut il rajouter une option, ou rediriger la sortie?
J'ai regardé aussi du cote de la commande awk, mais idem pour interpréter le manuel... Il faut faire un programme ?
Je ne peux pas faire tout simplement:
[xterm] gawk -option_donnant_nb_ling -option_donnant_nb_colo 'texte a rechercher' fichier_entree >> sortie
?
J'ai trouve une commande match, mais je ne vois aps vraiment comment m'en servir.
En plus, il peut y avoir plusieurs erreurs différents sur une meme ligne de mon fichier,et je voudrais qu'il parcourt toutes les lignes, et me releve toutes les lignes ou j'ai au moins une erreur en y rajoutant l'endroit où elles sont (tableau avec match?) , comme avec grep un peu.
C pas possible?
Merci pour votre réflexion...
marion
Message édité par marionnet' le 20-08-2004 à 15:49:10