Grep dans un fichier journal énorme (> 14 Go) que le dernier x Go?

34

J'ai besoin de chercher quelque chose dans un énorme fichier journal (plus de 14 Go). Je suis à peu près sûr que c'est dans les 4 derniers Go environ.

Existe-t-il un moyen de passer le premier X GB pour accélérer les choses?

Roger
la source
7
LC_ALL=C greppeut accélérer.
Jfs le
1
Vous pourrez obtenir beaucoup de rapidité en choisissant une grepexpression judicieuse ... L'évaluation des jokers de longueur inconnue (du type a.*thing) prendra beaucoup plus de temps. Il se peut que vous optimisiez pour la mauvaise chose (même s’il n’est jamais inutile de chercher dans une partie seulement du fichier, cela n’est évidemment pas la meilleure source d’accélération).
Floris

Réponses:

75

Je suppose que vous pouvez utiliser tail pour n’émettre que les 4 derniers Go environ en utilisant le -ccommutateur

-c, --bytes = [+] NUM
afficher les derniers NUM octets. ou utilisez -c + NUM pour générer en commençant par l'octet NUM de chaque fichier

Vous pouvez probablement faire quelque chose avec dd aussi en réglant bs=1et en skipajustant le décalage que vous voulez commencer, par exemple

dd if=file bs=1024k skip=12g | grep something
user9517 prend en charge GoFundMonica
la source
83
Ensuite, vous devez configurer logrotate.
Gerald Schneider le
3
@ Rogier S'il vous plaît ajouter une réponse avec la solution au lieu de l'ajouter à votre question. Ceci est similaire à la réponse de soi: serverfault.com/help/self-answer
AL le
5
@istheEnglishway: Eh bien, non, ils ont posté une commande différente.
Courses de légèreté avec Monica le
11
Mais votre réponse ne fournit pas la commande qui implémente cette solution, qui est une valeur ajoutée. Vous pouvez l'éditer dans votre réponse ou le PO le poster comme nouvelle réponse. Ils ne devraient certainement pas ajouter cela à la question, qui est ce qui s'est passé. Et vous ne devriez certainement pas lancer des épithètes comme "fourrer votre nez dans".
Courses de légèreté avec Monica le
7
@istheEnglishway, croyez-le ou ne pas avoir un exemple simplifie les choses plutôt que d'avoir à lire une page de manuel (voir aussi: la documentation de stackoverflow)
Pierre.Sassoulas Le
32

Je ne fais que poster ceci parce que certains commentaires l'ont demandé.

Ce que je finis par utiliser était (fichier de 15 Go). Cela a fonctionné très vite et m'a fait gagner beaucoup de temps.

tail -f -c 14G file | grep something

J'ai également fait un repère très rudimentaire sur le même dossier. J'ai testé:

fichier grep xxx
// pris à jamais (> 5 minutes)

dd if = fichier bs = 1 skip = 14G | grep xxx
// très rapide <1 sec

queue -c 14g | grep xxx
// assez rapide <2 sec

le tailest juste un peu plus court.

NB: le suffixe utilisé get Gdiffère par commande (Ubuntu 15.10)

Roger
la source
Avez-vous effacé le cache disque entre les tests? Je soupçonne que la plupart du temps dans le premier cas était I / O. L'accélération devrait être de l'ordre de 15 ×, pas 300 ×.
Reid
2
@Rid je ne l'ai pas fait. Mais j'ai exécuté chaque commande plusieurs fois. Je suis presque sûr que dd ou tail augmentera la vitesse de manière significative par rapport à grep (cache ou non).
Roger
19

Cela ne répond pas à la question sur le titre, mais fera ce que vous voulez faire. Utilisez tac pour inverser le fichier, puis utilisez grep pour rechercher votre chaîne. Si votre chaîne n'apparaît qu'une fois ou un nombre de fois connu dans le fichier, laissez-la s'exécuter jusqu'à ce qu'elle trouve le nombre connu d'occurrences. De cette manière, si votre hypothèse sur l'emplacement du fichier est incorrecte, elle le trouvera toujours. Si vous voulez le limiter, vous pouvez utiliser head pour le faire. La commande principale irait entre le tac et le grep.

Donc, la commande ressemble à:

tac < logfile | grep myString
Itsme2003
la source
1
Je suis venu ici pour écrire exactement la même réponse. Je suis surpris que personne n'ait voté pour le vôtre.
Dmitry Grigoryev
2
Ça m'a pris une minute, mais ensuite j'ai gémi au jeu de mots ... c'est le contraire du chat.
Sammi
1
J'avais besoin de fouiller dans un journal d'application / de débogage . Parce qu'il inverse les lignes, sa lecture ne devient pas plus facile ;-) Cela semble toutefois très rapide. Jamais vu tac, alors merci!
Roger