51 votes

Je dois examiner un fichier texte de 82,7 Go ( !). Qu'est-ce qui peut l'ouvrir ?

Nous avons récemment connu une panne d'un serveur Tomcat, qui a produit un fichier journal "catalina.out" de 82,7 Go, que j'ai sauvegardé pour une analyse médico-légale.

Quels éditeurs MacOS peuvent ouvrir des fichiers texte monstres sans consommer 80 Go de RAM ou provoquer des blocages de 15 minutes ?

18 votes

Avez-vous besoin de lire le fichier pour le parcourir à la recherche de détails ou de défauts intéressants ou avez-vous besoin d'effectuer une recherche dans le fichier ? Le fichier a-t-il un horodatage cohérent ? Les réponses ci-dessous conviennent toutes, mais à partir de 80 Go, vous devez envisager des techniques d'analyse et de recherche de journaux pour trouver les données dont vous avez besoin pour votre analyse. Voici un exemple de question, mais hors sujet serverfault.com/questions/63297/good-free-tomcat-log-analyser

2 votes

0 votes

Serait-il raisonnable d'écrire un analyseur pour le fichier qui extrait les enregistrements et les ajoute en tant que lignes dans une base de données ? Les bases de données sont conçues pour trier et rechercher efficacement des millions d'enregistrements ; les éditeurs de texte ne le sont pas.

96voto

79E09796 Points 811

less filename

À partir de la ligne de commande, il vous permet de visualiser les fichiers directement sans charger le fichier complet en mémoire.

10 votes

GNU less n'utilise par défaut que 64k d'espace tampon lors de l'affichage d'un fichier de taille arbitraire. Je suppose que less sous MacOS fait la même chose, donc c'est une excellente réponse. less a aussi une recherche regex, vous permet de paginer dans le fichier, et bien plus encore.

5 votes

C'est exactement ce que le premier more et ensuite less était fait pour. Beaucoup de touches de raccourci de navigation également. L'ensemble des outils Unix est très utile et vaut la peine d'être appris.

7 votes

@WayneConrad less n'est pas un programme standard avec de multiples implémentations ; less est le pager GNU basé sur more et c'est ce qui est livré avec MacOS.

40voto

Tim Seed Points 471

Je n'essaierais pas de l'ouvrir... Je préfère le faire :

  1. grep - recherche du texte
  2. split - découpe le fichier en morceaux de 10Mb.

Quelque chose comme :

grep "crash" My80GbFile.txt | more 

Si le gros fichier n'est pas "Line delimited" (délimité par des lignes)

split -b 10M My80GbFile.txt

Mais si le gros fichier n'est qu'un tas de lignes, alors (comme cela a été indiqué), divisez par ligne (100 000 par sous-fichier) dans ce cas.

 split -l 100000 My80GbFile.txt

11 votes

Vous pouvez utiliser grep -C5 crash juste pour avoir quelques lignes de contexte au-dessus et au-dessous de chaque match.

7 votes

Ceci. Ne pas ouvrir un fichier de 85 Go dans un éditeur. Débarrassez-vous d'abord de tous les éléments inutiles (sans compromettre le fichier original, bien sûr). Si le fichier est volumineux en raison d'une longue durée d'enregistrement, inspectez le temps à proximité de l'incident. S'il est volumineux parce qu'il s'agit d'un instantané d'un état système important, par exemple le vidage d'une base de données ou autre, essayez de vous concentrer sur les données pertinentes.

3 votes

Si le fichier est composé de lignes, au lieu de split -b il serait préférable de faire split -l . Sinon, vous diviseriez les lignes en deux.

27voto

Oskar Points 1242

Pour répondre à vos besoins immédiats, le meilleur éditeur visuel gratuit pour MacOS est le suivant BBEdit (lien vers le téléchargement sur le Mac App Store) et il fait tellement de choses - un véritable concentré de puissance. Une fois que vous l'avez, vous pouvez également payer pour les fonctions pro / automatisation / hors gratitude, mais il est gratuit pour toujours si vous voulez et aimez ce prix.

J'utilise également vi pour éditer des choses, mais cela ouvre la boîte de Pandore pour avoir besoin de l'interpréteur de commandes, de l'application terminal ou d'une autre application et d'un peu d'étude pour apprendre. comment sortir de l'éditeur (tldr ; essayez ZZ ou ZQ), personnalisez-le et apprenez à votre cerveau à penser à opérer sur du texte dans l'abstrait plutôt que d'utiliser la souris pour sélectionner des éléments. De même, un pager comme less o more o bat est également très facile à utiliser pour démarrer et naviguer dans des fichiers volumineux. (Et La batte vous donne ailes superbes couleurs et conscience syntaxique ).

brew install bat

Dans votre cas, l'application console fournie avec MacOS pourrait également être intéressante si vous pouvez utiliser la fonctionnalité de recherche. Lancez l'application à partir de Spotlight et faites glisser votre fichier monstre sur la fenêtre pour y jeter un coup d'œil.

11 votes

+1 pour BBEdit -- l'équipe de BareBones a spécifiquement optimisé cette application pour traiter des fichiers texte massifs au fil des ans.

10 votes

Veuillez ajouter si cet éditeur peut réellement ouvrir un fichier journal "catalina.out" de 82.7G. Et s'il nécessite 85G de RAM.

0 votes

@reinierpost Il est peu probable que quelqu'un ait un énorme fichier journal en main. Je ne suis pas sûr que quelqu'un d'autre que le demandeur puisse le confirmer.

12voto

Jcubed Points 2972
  1. Utilisez less dans une fenêtre de terminal. Il vous montrera une page à la fois du fichier, ne chargera qu'environ cette quantité en mémoire, de sorte que vous pouvez naviguer dans des fichiers multi-TB avec lui si vous le souhaitez.

    Vous devriez probablement ajouter le -n pour empêcher less d'essayer de calculer les numéros de ligne. Donc :

    less -n /path/to/file

    Rappelez-vous que vous pouvez taper less -n (n'oubliez pas l'espace final) et faites glisser le fichier du Finder vers la fenêtre du terminal pour ajouter le chemin d'accès à ce fichier.

  2. Une fois que vous avez visualisé le fichier dans less vous pouvez :

    • naviguer à l'aide des flèches haut/bas, space (une page plus bas), b (une page en arrière)...
    • recherche en utilisant / . Vous pouvez également rechercher les lignes ne contenant pas de motif avec /! . La recherche inversée utilise ? . Mais toutes les recherches analysent l'ensemble du fichier. Il vaut mieux l'avoir sur un SSD si vous le faites souvent.
    • naviguer vers une ligne spécifique du fichier en utilisant <numéro> suivi de G (G majuscule)
    • naviguer vers une partie spécifique du fichier en utilisant <numéro> suivi de % . Donc 50% vous amènera au milieu du fichier, 90% jusqu'aux derniers 10%, etc.

Si votre fichier journal comporte des horodatages et que vous savez à quel moment vous voulez le consulter, l'approche la plus rapide est la suivante :

  1. ouvrir le fichier
  2. Utilisez une "recherche binaire" pour trouver la partie brute du fichier qui vous intéresse :

    • Type 50% qui vous montrera le milieu du fichier.
    • Si la partie que vous voulez est après, allez à 75% sinon 25%
    • Répétez l'opération jusqu'à ce que vous ayez trouvé la partie pertinente.
  3. Utilisez une recherche régulière (en utilisant / pour aller de l'avant ou ? pour revenir en arrière) pour trouver la ligne exacte que vous recherchez (sur la base de l'horodatage exact ou d'un mot spécifique qui montre le problème).

Cela devrait vous permettre de naviguer rapidement vers la partie pertinente du fichier.


Si vous pensez que vous aurez beaucoup de recherches à effectuer dans un sous-ensemble du fichier, vous pouvez utiliser alternativement grep avec une combinaison spécifique de date ou d'heure (dans le bon format) pour extraire d'abord ce sous-ensemble dans un autre fichier plus petit. Par exemple, si vous savez que le crash s'est produit aujourd'hui un peu après midi alors que votre journal couvre plusieurs mois, vous pourriez

grep '2020-02-17 12:' /path/to/file > extracted-log.txt

Vous obtiendrez ainsi toutes les lignes qui contiennent un horodatage compris entre 12:00:00 et 12:59:59 inclus. Bien entendu, le format exact dépendra du format réel utilisé pour les horodatages.

grep analysera le fichier entier une fois pour trouver toutes les lignes pertinentes, ce qui prendra un peu de temps sur un très gros fichier, mais vous aurez alors un fichier beaucoup plus facile à gérer.


Une alternative peut être d'utiliser dd pour "extraire" une partie du fichier original, en utilisant des décalages et des longueurs trouvés dans less ( Ctrl-G pour obtenir le décalage actuel). dd est un outil très puissant mais peut être très dangereux à utiliser, donc à utiliser avec précaution (et certainement pas en tant que root ou avec sudo si vous n'êtes pas sûr à 100% de ce que vous faites) :

dd if=/path/to/original/file of=destination_file.txt bs=1 skip=<start offset> count=<length>

Notez que cela n'est pas très efficace, il est préférable d'utiliser une taille de bloc plus importante ( bs ), idéalement une puissance de 2 telle que 1024, et diviser skip y count par cette taille de bloc.

Je suis sûr qu'il doit y avoir d'autres outils qui font la même chose, mais je n'ai rien trouvé. Je pense que certaines versions de cat peut le faire, mais pas celui de MacOS apparemment.

11voto

Hobbamok Points 221

Ne le faites pas (ouvrez-le comme UN seul fichier).

Y a-t-il une raison spécifique pour laquelle vous ne pouvez pas simplement le casser en morceaux d'environ 1 Go avec un script ?

Oui, la recherche et les fonctionnalités similaires en pâtiront, mais ce sera déjà le cas avec un fichier de 80 Go.

Si vous avez des points de rupture spécifiques dans le script (jours dans l'horodatage, messages de démarrage/arrêt), vous pourriez également le diviser pour cela. De cette façon, vous obtiendriez probablement même une signification supplémentaire dans le fichier.

De plus, une fois divisé, n'importe quel IDE décent (comme IntelliJ IDEA ou un autre) vous donnera une fonctionnalité de recherche sur le texte de retour.

[Attention : Cela vient d'un programmeur, donc il se peut que ce ne soit pas votre approche ou que ce soit exagéré, je peux seulement dire que cela fonctionnerait au final, vous devrez savoir si cela en vaut la peine].

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X