Comment obtenir moins pour rechercher plus rapidement avec des fichiers journaux volumineux?

15

J'ai souvent affaire à des fichiers journaux incroyablement volumineux (> 3 Go). J'ai remarqué que les performances de less sont terribles avec ces fichiers. Souvent, je veux sauter au milieu du fichier, mais quand je dis moins de sauter en avant de 15 lignes, cela prend quelques minutes.

Le problème que j'imagine est que moins de besoins pour analyser le fichier pour les caractères «\ n», mais cela prend trop de temps.

Existe-t-il un moyen de le faire rechercher simplement un décalage explicite? par exemple, chercher à octet compenser 1,5 milliard dans le fichier. Cette opération devrait être plus rapide de plusieurs ordres de grandeur. Si moins ne fournit pas une telle capacité, existe-t-il un autre outil qui le fait?

UsAaR33
la source
si vous effacez le fichier pour les caractères interdits, est-ce une supposition juste que vous purgerez les caractères susmentionnés après les avoir trouvés? Si oui, puis-je offrirperl -pi -e 's/\n//g;' <filename>
Mike Pennington
Désolé, écrémé n'était pas le bon mot. Aurait dû utiliser la numérisation. moins par conception recherche la nouvelle ligne (\ n). Cette analyse prend très longtemps sur des fichiers volumineux.
UsAaR33

Réponses:

21

vous pouvez moins vous arrêter de compter des lignes comme celle-ci less -n

Pour sauter à un endroit spécifique comme disons 50%, less -n +50p /some/logc'était instantané pour moi sur un fichier journal de 1,5 Go.

Modifier: pour un décalage d'octet spécifique: less -n +500000000P ./blah.log

Sekenre
la source
1
Le comptage de lignes n'a jamais été le problème; Je pourrais simplement utiliser escp / ctrl-c pour cela. Mais c'est la vraie réponse; P passe à un décalage d'octet spécifique!
UsAaR33
5

Moins, étant un téléavertisseur, est intrinsèquement orienté ligne. Lorsque vous démarrez, si c'est un gros fichier, il dira "compter les numéros de ligne" et vous appuyez sur ÉCHAP pour arrêter cela, mais sinon, il fait des lignes. C'est ce que ça fait.

Si vous voulez sauter directement au milieu du fichier et sauter le début, vous pouvez toujours chercher au-delà du début; Je ferais quelque chose comme tail -c +15000000 /some/log | less.

womble
la source
3
vous voulez dire tail -c ...ou vous avez une lastcommande bizarre .
Alan Curry
Le problème avec cette stratégie est que vous ne pouvez plus chercher dans tout le fichier depuis moins (recherche de messages spécifiques, etc.)
Sekenre
@AlanCurry: C'est juste une orthographe alternative ... <grin>
womble
0

less semble avoir une petite surcharge des paramètres régionaux

Si vous utilisez uniquement des caractères ASCII, vous pouvez l'accélérer un peu en utilisant:

LC_ALL=C less big-log-file.log

Dans mon cas, le débit est passé de ~ 30M ib / s à ~ 50 Mib / s (le taux est lié au CPU)

Romuald Brunet
la source