Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1199 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs

  [RESOLU] Grep? awk?(resolu) => Pb sur l'expression reguliere

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Grep? awk?(resolu) => Pb sur l'expression reguliere

n°534756
marionnet'
Posté le 06-08-2004 à 09:58:59  profilanswer
 

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
mood
Publicité
Posté le 06-08-2004 à 09:58:59  profilanswer
 

n°535276
Hansolo
Posté le 07-08-2004 à 12:28:45  profilanswer
 

Les séquences d'erreur sont elles délimitées ?

n°536190
marionnet'
Posté le 09-08-2004 à 11:01:06  profilanswer
 

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!

n°536202
jc the gre​at
Posté le 09-08-2004 à 11:41:35  profilanswer
 

marionnet' a écrit :

En fait, mes séquences que je recherche sont du style:
(tout sauf 252 ou 25) espace 253


 
ton match doit trouver: 26espace253, 01espace253, espaceespace253
mais ne doit pas ressortir : 252espace253 ni 25espace253 ?
c'est cela ?  :??:

n°536219
Hansolo
Posté le 09-08-2004 à 11:54:49  profilanswer
 

Pourquoi [^0-9] alors que tu sais que tu veux un espace à cet endroit ?

n°536239
marionnet'
Posté le 09-08-2004 à 12:18:53  profilanswer
 

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!

n°543678
marionnet'
Posté le 20-08-2004 à 15:48:26  profilanswer
 

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 :
  1. 4 0 0 41 50 999 999 41 50 42 50 999
  2. 5 0 0 42 72 999 999 42 62 42 72 40
  3. 6 0 0 72 999 999 999 44 50 42 72 70
  4. 7 0 0 999 72 41 41 40 40 999 37 20
  5. 8 0 0 999 72 41 40 70 72 42 27 40
  6. 9 0 0 50 41 72 40 70 41 50 41 40
  7. 10 0 0 61 41 72 72 70 44 50 41 40


 
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 :
  1. if test $# -ne 4       # si le nombre de parametres n'est pas 3
  2. then                    # affiche l'usage
  3.     echo 'Usage: ./rech.sh dr_annee nb_colonne fich_out fich_in '
  4.     echo 'Ce programme cherche les sequences d erreur dans le fichier'
  5.    echo 'Il renvoie un fichier avec la ligne, la colonne et l annee ou la sequence est erronee'
  6.   exit 1
  7. fi
  8. dr_annee=$1
  9. nb_colonne=$2
  10. fich_out=$3
  11. shift
  12. shift
  13. shift
  14. awk '{ nb_colonne='$nb_colonne';  dr_annee='$dr_annee'; str=$0; value=0; while (pos = match(str,/(\<(10|11|15|20|25|252|253|254|26|27|30|31|32|33|34|35|36|37|38|40|41|42|44|45|46|47|50|51|61|62|63|64|70|71|72|73|74|75|81|82|83|90|91|999)[ ]252\> )|(\<(10|11|15|20|25|252|253|254|26|27|30|31|32|33|34|35|36|37|38|40|41|42|44|45|46|47|50|51|61|62|63|64|70|71|72|73|74|75|81|82|83|90|91|999)[ ](10|11|15|20|25|251|253|254|26|27|30|31|32|33|34|35|36|37|38|40|41|42|44|45|46|47|50|51|61|62|63|64|70|71|72|73|74|75|81|82|83|90|91|999)[ ]253\> )|(\<(10|11|15|20|25|252|253|254|26|27|30|31|32|33|34|35|36|37|38|40|41|42|44|45|46|47|50|51|61|62|63|64|70|71|72|73|74|75|81|82|83|90|91|999)[ ]252[ ]253\> )/)){
  15. size = RSTART + RLENGTH 
  16. R1=RSTART
  17. L1=RLENGTH
  18. #str_temp=substr(str,RSTART)
  19. #pos_temp=match(str_temp,/\<[0-9][0-9]*\>/)
  20. #R2=RSTART
  21. #L2=RLENGTH
  22. L2=L1
  23. #print R1
  24. #print L1
  25. str=substr(str, R1 + L2)
  26. pos += value
  27. #print pos
  28. annee=dr_annee+1
  29. i=length($0)
  30. #print i
  31. j=nb_colonne
  32. #print j
  33. while(i>=pos){
  34. i += -length($j)-1
  35. #print i
  36. annee=annee-1
  37. #print annee
  38. j=j-1
  39. }
  40. #print  FNR " : "  pos " : " annee " : " $O
  41. print FNR " : "  $O
  42. value += R1 + L2 -1     
  43. }               
  44. }' $@  >>  $fich_out
  45. echo Taille: ;
  46. wc -l $fich_out;


 
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+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs

  [RESOLU] Grep? awk?(resolu) => Pb sur l'expression reguliere

 

Sujets relatifs
[résolu]-[Mdk10] Accés internet pas de résolution de nom[résolu] question xfce & gnome, pas de barre des taches
MDK 10 install driver NVidia (résolu)libdvdcss --> divX bizarre [résolu]
Au secours : kernel panic. Impossible de booter linux. (resolu)[résolu][debian woody] Gcc
hotsmtpd (resolu)[Résolu] installer Postgresql sur mdke 10.0 Official
[XFree => XORG] problème de font avec firefox | résolu[resolu].bashrc vs. les différents terminaux
Plus de sujets relatifs à : [RESOLU] Grep? awk?(resolu) => Pb sur l'expression reguliere


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR