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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [bash] empilage de grep

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[bash] empilage de grep

n°1180537
y-master
Cherche bien, tu va trouver :)
Posté le 19-11-2009 à 16:16:30  profilanswer
 

J'ai besoin de greper des fichiers log relativement conséquent (+ de 100Mo) pour récupérer des infos.
j'en suis arrivé a cette ligne mais je suis sûr que ça peut être optimisé, car là, c'est moche !

Code :
  1. cat file.log | grep 675 | grep 10.33.0.\... -o | grep -v 10.33.0.2 | grep -v 10:33 | sort | uniq > extract.log


une idée ?


---------------
Don't forget the GNU Power :)   /   LanParty sur Toulouse   /   Mon Feed-Back (2006 style)
mood
Publicité
Posté le 19-11-2009 à 16:16:30  profilanswer
 

n°1180541
wedgeant
Da penguin inside
Posté le 19-11-2009 à 16:29:55  profilanswer
 

useless cat is useless, déjà :o
après, ton 675 il correspond à quoi ? [:petrus dei]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1180547
zecrazytux
Posté le 19-11-2009 à 16:40:06  profilanswer
 

awk !
 
pour sortir seulement des lignes qui correspondent à des expressions régulières complexe, il n'y a rien de mieux que awk.
 
pour effectuer un traitement dessus, perl. (si ce n'est que pour afficher la ligne, perl sera un peu moins performant)
 
là ce qui est lent c'est les pipes, ça spawn à mort sur 100M de logs :o


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1180587
ducon3d
Posté le 19-11-2009 à 20:40:35  profilanswer
 

tu pourrai filer un extrait de ton log, genre 20-30 lignes avec au moins 2 "bonnes réponses" ?
 
et pour satisfaire ma curiosité c'est pour quoi faire ? tu récupere des ip d'un log de quoi ? et 675 c'est le port ?  :pt1cable:  
 
j'ai bien une solution, enfin un début avec sed, mais bon faudrai un bout de ton log pour tester.

n°1180600
ducon3d
Posté le 19-11-2009 à 21:14:48  profilanswer
 

Code :
  1. sed -n -e 's/\(675 \).*\(10\.33\.0\.[0-1][0-5][0-9]\)/\2/p' file.log
 

après comme je sais pas si tu as 675 et aussi 6759 ou autre, bref là je considère que tu prend que si c'est 675 exactement et je suppose qu'il est suivi d'un espace obligatoirement puis de trucs divers et varié ou non. ensuite je récupère les ips 10.33.0.(3 chiffres obligatoirement commencant par 0 ou 1 mais pas 2).

 

ceci remplace sans pipe :

Code :
  1. cat file.log | grep 675 | grep 10.33.0.\... -o | grep -v 10.33.0.2
 

une fois que tu aura filé un bout de ton log je completerai pour le grep -v  10:33 mais comme je sais pas ou il est. et si c'est une fin d'ip et le port par exemple.

 

bref plus d'info  :hello:

 

edit:
pour manier l'arme ultime sed : http://www.grymoire.com/Unix/Sed.html


Message édité par ducon3d le 19-11-2009 à 21:18:02
n°1180737
y-master
Cherche bien, tu va trouver :)
Posté le 20-11-2009 à 12:18:32  profilanswer
 

Enfait c'est des log windows transmis à un serveur syslog.
Chaque ligne correspond a une entrée de l'eventlog.
 
Petite explication :
grep 675 sert à récupérer les lignes avec l'eventid 675
grep 10.33.0.\... -o  sert à récupérer toute les ip dans ces lignes
grep -v 10.33.0.2 sert à enlever l'ip du serveur qui est présente en début de chaque lignes
grep -v 10:33 car mon deuxième grep me remonte aussi autre chose que des IP, je ne sais pas pourquoi
sort | uniq bon la c'est clair, on vire les doubons et on trie
 
un exemple du log ICI


Message édité par y-master le 20-11-2009 à 15:09:14

---------------
Don't forget the GNU Power :)   /   LanParty sur Toulouse   /   Mon Feed-Back (2006 style)
n°1180761
ducon3d
Posté le 20-11-2009 à 13:42:12  profilanswer
 

ton lien marche pas :)

n°1180784
y-master
Cherche bien, tu va trouver :)
Posté le 20-11-2009 à 15:09:27  profilanswer
 

lien corrigé


---------------
Don't forget the GNU Power :)   /   LanParty sur Toulouse   /   Mon Feed-Back (2006 style)
n°1180827
ducon3d
Posté le 20-11-2009 à 17:04:10  profilanswer
 

Code :
  1. sed -n -e 's/.*\(675\t\).*\(10\.33\.0\.[0-1][0-9][0-9]\).*/\2/p' file.log | sort -u > extract.log
 

test ca et compare avec time les 2 méthodes. histoire de savoir ce que ca donne sur un gros log
et si c'est vraiment ok aussi.

 

sinon je sais c'est moche mais il y a un seul pipe

Message cité 1 fois
Message édité par ducon3d le 20-11-2009 à 17:05:40
n°1181206
y-master
Cherche bien, tu va trouver :)
Posté le 23-11-2009 à 15:40:30  profilanswer
 

ducon3d a écrit :

Code :
  1. sed -n -e 's/.*\(675\t\).*\(10\.33\.0\.[0-1][0-9][0-9]\).*/\2/p' file.log | sort -u > extract.log


 
test ca et compare avec time les 2 méthodes. histoire de savoir ce que ca donne sur un gros log
et si c'est vraiment ok aussi.
 
sinon je sais c'est moche mais il y a un seul pipe


Désolé mais je vais rester sur mon empilage de grep  :D :  
- ta commande a base de sed; 5min de traitement; aucun résultat probant :o  
- mon empilage de grep; 38sec de traitement; pile la liste d'ip que je cherche... :love:
 
edit : sur un fichier de 350mo quand même


Message édité par y-master le 23-11-2009 à 15:42:02

---------------
Don't forget the GNU Power :)   /   LanParty sur Toulouse   /   Mon Feed-Back (2006 style)
mood
Publicité
Posté le 23-11-2009 à 15:40:30  profilanswer
 

n°1181207
zecrazytux
Posté le 23-11-2009 à 15:41:15  profilanswer
 

awk ou perl bordel


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1181209
zecrazytux
Posté le 23-11-2009 à 15:42:59  profilanswer
 

awk '{ if($14 == 675) { print $55 } }' /tmp/fuck


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1181215
y-master
Cherche bien, tu va trouver :)
Posté le 23-11-2009 à 15:53:12  profilanswer
 

ok 15sec, you win :D
Je vais me plonger dans la doc de awk ;)


---------------
Don't forget the GNU Power :)   /   LanParty sur Toulouse   /   Mon Feed-Back (2006 style)
n°1181282
ducon3d
Posté le 23-11-2009 à 20:35:15  profilanswer
 

depuis le temps que l'on me dis du bien de awk, j'ai toujours pas mis le nez dedans :sweat:  
 
par contre je comprend pas pourquoi la commande avec sed ne marche pas chez toi.
 
enfin bref, impressionant awk, vraiment je vais m'y coller
 
par curiosité, j'ai bidonné un log a partir du log que tu as filer et en changeant quelques ip, environ 100mo
j'ai testé les 3 awk grep sed (il arrivent dans cet ordre d'ailleurs (niveau temps), mais j'ai le même résultat de sortie.
 
je me coucherai moin con ce soir.
 :hello:


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

  [bash] empilage de grep

 

Sujets relatifs
script bash pour ftp[bash] grep plusieurs pattern, et autres joyeusetés...
[bash] stats des fichiers par taille[bash] Contrôler la longueur des lignes dans un fichier.
[bash/perl] comparer un nom de dossier avec la datescript bash et setuid
bash, écrire dans un tableauScript bash : exécution de plusieurs scripts
Equivalent de 'chomp' sur bash 
Plus de sujets relatifs à : [bash] empilage de grep


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