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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [SHELL] récuperer les nieme caract. dans des chaine obtenue par | grep

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SHELL] récuperer les nieme caract. dans des chaine obtenue par | grep

n°1950473
tuxbleu
renie ses origines
Posté le 15-12-2009 à 12:48:28  profilanswer
 

Bonjour
 
J'essaie un traitement qui me semble un poil complexe, je sollicite votre aide.
Je trie dans un fichier texte des logs en fonction de critères bien défini comme ceci
 
cat fichier-log | grep critère1
 
j'aimerais rediriger le résultat de ce cat dans différents fichiers textes en fonction de 2 paramètres présents dans chacune des lignes, à une place bien précise : les 3 premier caractères de chaque ligne que je nomme pour l'exemple $m et les 5et6em caractères que je nomme $d .
Le but est que chaque ligne de log aille se copier dans le fichier texte nommé $m$d.log
 
il me manque donc un bout à ma commande
ya  
"cat fichier-log | grep critère1"
probablement aussi
" >> %m%d.log "
 
Vous pourriez m'aider ?


---------------
Mon topic de vente - Mon feed-back
mood
Publicité
Posté le 15-12-2009 à 12:48:28  profilanswer
 

n°1950476
olivthill
Posté le 15-12-2009 à 12:51:30  profilanswer
 

Pourquoi un cat ?
Faire tout simplement

grep critere1 fichier-log

.
Pour récupérer un caractère, ou une sous chaine, utiliser cut.

n°1950494
tuxbleu
renie ses origines
Posté le 15-12-2009 à 13:57:20  profilanswer
 

olivthill a écrit :

Pourquoi un cat ?
Faire tout simplement

grep critere1 fichier-log

.
Pour récupérer un caractère, ou une sous chaine, utiliser cut.


heu, savais pas qu'on pouvait appliquer grep direct sur un fichier.
 
comment je fais pour appliquer mon cut à chaque ligne extraite par grep et reverser ainsi chaque ligne dans le bon fichier ?
 
grep critere1 fichierlog >> `cut N-M`-`cut N'-M'`.log  :??:
Jsais pas pourquoi , mais je sens que je fais fausse route [:tinostar]


---------------
Mon topic de vente - Mon feed-back
n°1950611
pataluc
Posté le 15-12-2009 à 18:06:19  profilanswer
 

awk est ton ami.
 
tu dois pouvoir faire un truc du genre:
 

Code :
  1. awk '{system("echo $0 >> substr($0,N,M) " );}' fichier.log


Message édité par pataluc le 15-12-2009 à 18:06:47
n°1950631
tuxbleu
renie ses origines
Posté le 15-12-2009 à 20:35:55  profilanswer
 

Vais lire le man pour essayer de comprendre la philosophie du truc, pasque là ca me semble flou :jap:


---------------
Mon topic de vente - Mon feed-back
n°1952154
tuxbleu
renie ses origines
Posté le 21-12-2009 à 17:47:45  profilanswer
 

putain mais awk c'est énorme  [:cerveau lent]


---------------
Mon topic de vente - Mon feed-back
n°1952332
pataluc
Posté le 22-12-2009 à 11:41:53  profilanswer
 

tuxbleu a écrit :

putain mais awk c'est énorme  [:cerveau lent]


et ouais!  :D

n°1952346
tuxbleu
renie ses origines
Posté le 22-12-2009 à 12:01:08  profilanswer
 

et encore j'ai pas poussé les possibilités à l'extrême, mais en gros je choisi mon action en fonction de la présence où non de telle chaine de charactère à une position donnée, et ca gère bien.
 
Une idée par contre pour faire genre :
délimiteur":" , récupérer la variable $7, dans laquelle je cherche à tester le valeur pour un délimiteur";" la variable $4 ?  
 
un truc genre  
awk '[...]
$7=="condition1" { awk '...' print $7}  
 
:??:


---------------
Mon topic de vente - Mon feed-back
n°1952373
pataluc
Posté le 22-12-2009 à 13:25:11  profilanswer
 

dans les scripts awk tu peux utiliser la fonction split.

n°1952386
tuxbleu
renie ses origines
Posté le 22-12-2009 à 13:58:36  profilanswer
 

pataluc a écrit :

dans les scripts awk tu peux utiliser la fonction split.


 :jap:


---------------
Mon topic de vente - Mon feed-back
mood
Publicité
Posté le 22-12-2009 à 13:58:36  profilanswer
 

n°1955071
tuxbleu
renie ses origines
Posté le 05-01-2010 à 12:39:18  profilanswer
 

J'up mon petit topic...
mes script avec awk ont tres bien fonctionnés... jusqu'àu 31/12...
Apres des petites recherches, je me rends compte que le problème vient que le fichier sur lequel j'applique awk est composé comme suit :
Dec espace 31:12:09 ...
Jan espace espace 4:01:09 ...
 
Le double espace vient foutre le bazard, car je fais :
awk 'BEGIN { FS="\ "}
$7=="...." { action}
 
or apparemment avec un double espace,  je dois décaler mon test d'un paramètre.
Je ne vais bien sur pas mondifier à la main mon script le 9 du mois et le 31, pour que ca marche.
Une idée pour qu'il ne tienne pas compte du double espace ?


---------------
Mon topic de vente - Mon feed-back
n°1955076
pataluc
Posté le 05-01-2010 à 13:18:48  profilanswer
 

le double espace ne semble pas merder il le considère comme un simple (en tout cas dans mes tests) c'est pas plutôt un split ou un cut qui déconne? poste voir un morceau de ton script et de ton fichier à traiter stp...


Message édité par pataluc le 05-01-2010 à 13:18:56
n°1955126
tuxbleu
renie ses origines
Posté le 05-01-2010 à 14:17:50  profilanswer
 

yep :
 
script en question :  
log.log est créé avant l'appel de ce script et est créé par un script genre "logtail /var/log/fichierdelog > /root/log/log.log

Code :
  1. #!/bin/bash
  2. grep ssh /root/log/log.log | grep maps -v > /root/log/temp_log
  3. awk 'BEGIN { FS="\ "}
  4. $7=="publickey" { print $9" : "$2" "$1" "$3" : "$6" "$10" "$11 }
  5. $6=="pam_unix(sshd:session):" { print $11" : "$2" "$1" "$3" : "$7" "$8 }
  6. ' /root/log/temp_log >> /root/log/log.auth
  7. /bin/cat /root/log/log.log >> /root/log/backlog/log_brut-`/bin/date +%F`.log
  8. /bin/cat /root/log/temp_log >> /root/log/backlog/log_trie-`/bin/date +%F`.log
  9. /bin/rm /root/log/log.log
  10. /bin/rm /root/log/temp_log


 
log.log ... Avec ca ca marche pas

Code :
  1. Jan  3 08:17:01 ****** CRON[1644]: pam_unix(cron:session): session opened for user root by (uid=0)
  2. Jan  3 08:17:01 ****** CRON[1644]: pam_unix(cron:session): session closed for user root
  3. Jan  3 09:17:01 ****** CRON[1650]: pam_unix(cron:session): session opened for user root by (uid=0)
  4. Jan  3 09:17:01 ****** CRON[1650]: pam_unix(cron:session): session closed for user root
  5. Jan  3 10:17:01 ****** CRON[1656]: pam_unix(cron:session): session opened for user root by (uid=0)
  6. Jan  3 10:17:01 ****** CRON[1656]: pam_unix(cron:session): session closed for user root


et ca marchait avec :

Code :
  1. Dec 31 08:17:01 ****** CRON[1644]: pam_unix(cron:session): session opened for user root by (uid=0)
  2. Dec 31 08:17:01 ****** CRON[1644]: pam_unix(cron:session): session closed for user root


 
Pour que ca marche avec janvier, je dois ajouter 1 à tous les paramètres  [:airforceone]


---------------
Mon topic de vente - Mon feed-back
n°1955156
pataluc
Posté le 05-01-2010 à 14:50:28  profilanswer
 

ca marche chez moi, avec un awk 3.1.6 sous cygwin... :spamafote:

n°1955207
tuxbleu
renie ses origines
Posté le 05-01-2010 à 16:37:01  profilanswer
 

merde....
Bon je vais régler ca à la porc avec "Si $7=="publickey" ...
puis Si $8=="publickey"...
Mais bon stun peu cracra..


---------------
Mon topic de vente - Mon feed-back
n°1955209
tuxbleu
renie ses origines
Posté le 05-01-2010 à 16:38:31  profilanswer
 

Bien sur le fichier d'exemple log.log que je donne ne produit rien en résultat, ya dans cet extrait aucune ligne qui ne remplie une condition.


---------------
Mon topic de vente - Mon feed-back
n°1955213
pataluc
Posté le 05-01-2010 à 16:44:47  profilanswer
 

ouais j'avais traduit et remplacé sshd par cron pour checker le résultat...

n°1955215
tuxbleu
renie ses origines
Posté le 05-01-2010 à 16:46:02  profilanswer
 

Comment je peux savoir ma version d'awk ? Ma netinstall est recente, mais why not...


---------------
Mon topic de vente - Mon feed-back
n°1955216
tuxbleu
renie ses origines
Posté le 05-01-2010 à 16:46:48  profilanswer
 

pataluc a écrit :

ouais j'avais traduit et remplacé sshd par cron pour checker le résultat...


 :jap:


---------------
Mon topic de vente - Mon feed-back
n°1955220
pataluc
Posté le 05-01-2010 à 16:55:05  profilanswer
 

Code :
  1. awk --version

n°1955255
tuxbleu
renie ses origines
Posté le 05-01-2010 à 17:55:32  profilanswer
 

humm, je suis ptet boulet, masi ma debian em dis que c'est pas option. J'ai essayé apt-cache show awk, ca produit rien... humm..


---------------
Mon topic de vente - Mon feed-back
n°1955265
pataluc
Posté le 05-01-2010 à 18:22:36  profilanswer
 

Code :
  1. awk -W version

sinon

n°1955298
tuxbleu
renie ses origines
Posté le 05-01-2010 à 22:24:08  profilanswer
 

j'ai parcouru le man de awk, j'ai bien vu cette option, mais je ne sais pas pourquoi, j'ai fais awk -W , ca m'a dit qu'il manquait un paramètre, j'ai pas cherché plus loin, je me suis dis que je me fourvoyais....
:jap:


---------------
Mon topic de vente - Mon feed-back
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [SHELL] récuperer les nieme caract. dans des chaine obtenue par | grep

 

Sujets relatifs
[SHELL] Une histoire "pipe"[KSH][RESOLU]Enlever $ situé en fin de chaine s'il existe [HELP]
[résolu] "\" à la fin d'une chaine de caractèresutilisation de mysql dans un shell linux
Requete pour remplacer une partie de chaine via MyadminL'heure est grave [Comparaison de chaîne de caractères]
Recuperer l'email d'un user sur ADSI depuis VBAvisuel studio 2008/recuperer la valeur d'une cellule du gridview
afficher les combinaisons de chaine de caractèresAfficher un certain nombre de caractères dans une chaîne (S.O.S)
Plus de sujets relatifs à : [SHELL] récuperer les nieme caract. dans des chaine obtenue par | grep


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