empilage de grep [bash] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 19-11-2009 à 16:29:55
useless cat is useless, déjà
après, ton 675 il correspond à quoi ?
Marsh Posté le 19-11-2009 à 16:40:06
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
Marsh Posté le 19-11-2009 à 20:40:35
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 ?
j'ai bien une solution, enfin un début avec sed, mais bon faudrai un bout de ton log pour tester.
Marsh Posté le 19-11-2009 à 21:14:48
Code :
|
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 :
|
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
edit:
pour manier l'arme ultime sed : http://www.grymoire.com/Unix/Sed.html
Marsh Posté le 20-11-2009 à 12:18:32
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
Marsh Posté le 20-11-2009 à 15:09:27
lien corrigé
Marsh Posté le 20-11-2009 à 17:04:10
Code :
|
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
Marsh Posté le 23-11-2009 à 15:40:30
ducon3d a écrit :
|
Désolé mais je vais rester sur mon empilage de grep :
- ta commande a base de sed; 5min de traitement; aucun résultat probant
- mon empilage de grep; 38sec de traitement; pile la liste d'ip que je cherche...
edit : sur un fichier de 350mo quand même
Marsh Posté le 23-11-2009 à 15:41:15
ReplyMarsh Posté le 23-11-2009 à 15:42:59
awk '{ if($14 == 675) { print $55 } }' /tmp/fuck
Marsh Posté le 23-11-2009 à 15:53:12
ok 15sec, you win
Je vais me plonger dans la doc de awk
Marsh Posté le 23-11-2009 à 20:35:15
depuis le temps que l'on me dis du bien de awk, j'ai toujours pas mis le nez dedans
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.
Marsh Posté le 19-11-2009 à 16:16:30
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 !
une idée ?
---------------
Don't forget the GNU Power :) / LanParty sur Toulouse / Mon Feed-Back (2006 style)