récuperer les nieme caract. dans des chaine obtenue par | grep [SHELL] - Shell/Batch - Programmation
Marsh Posté le 15-12-2009 à 12:51:30
Pourquoi un cat ?
Faire tout simplement
grep critere1 fichier-log |
.
Pour récupérer un caractère, ou une sous chaine, utiliser cut.
Marsh Posté le 15-12-2009 à 13:57:20
olivthill a écrit : Pourquoi un cat ?
. |
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
Marsh Posté le 15-12-2009 à 18:06:19
awk est ton ami.
tu dois pouvoir faire un truc du genre:
Code :
|
Marsh Posté le 15-12-2009 à 20:35:55
Vais lire le man pour essayer de comprendre la philosophie du truc, pasque là ca me semble flou
Marsh Posté le 21-12-2009 à 17:47:45
ReplyMarsh Posté le 22-12-2009 à 12:01:08
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}
Marsh Posté le 22-12-2009 à 13:25:11
ReplyMarsh Posté le 22-12-2009 à 13:58:36
pataluc a écrit : dans les scripts awk tu peux utiliser la fonction split. |
Marsh Posté le 05-01-2010 à 12:39:18
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 ?
Marsh Posté le 05-01-2010 à 13:18:48
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...
Marsh Posté le 05-01-2010 à 14:17:50
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 :
|
log.log ... Avec ca ca marche pas
Code :
|
et ca marchait avec :
Code :
|
Pour que ca marche avec janvier, je dois ajouter 1 à tous les paramètres
Marsh Posté le 05-01-2010 à 16:37:01
merde....
Bon je vais régler ca à la porc avec "Si $7=="publickey" ...
puis Si $8=="publickey"...
Mais bon stun peu cracra..
Marsh Posté le 05-01-2010 à 16:38:31
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.
Marsh Posté le 05-01-2010 à 16:44:47
ReplyMarsh Posté le 05-01-2010 à 16:46:02
Comment je peux savoir ma version d'awk ? Ma netinstall est recente, mais why not...
Marsh Posté le 05-01-2010 à 16:46:48
pataluc a écrit : ouais j'avais traduit et remplacé sshd par cron pour checker le résultat... |
Marsh Posté le 05-01-2010 à 17:55:32
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..
Marsh Posté le 05-01-2010 à 22:24:08
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....
Marsh Posté le 15-12-2009 à 12:48:28
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