Comment analyser des fichiers .txt extrêmement volumineux (plus de 70 Go) ?

Comment analyser des fichiers .txt extrêmement volumineux (plus de 70 Go) ?

Choisissez vos outils

Il semble qu’Excel ne soit pas un outil adapté à ce que vous voulez faire.

Une approche serait d’utiliser un outil différent pour consolider ou résumer les données. awk, sed, grep ou perl pourraient être mieux adaptés à ce traitement initial et créer un fichier CSV plus petit qui pourrait ensuite être traité dans Excel ou d’autres outils.

Il existe d’autres outils qui pourraient être mieux adaptés pour faire tout le travail. Peut-être quelque chose comme R ou un SGBD. Cela dépend de ce que vous voulez faire avec les données.

Pour simplement prendre un ensemble de fichiers texte hétérogènes et réorganiser et sélectionner des colonnes, je me tournerais immédiatement vers perl. D’autres utiliseraient awk.

Puisque des outils comme awk et perl peuvent traiter les fichiers ligne par ligne et n’ont pas besoin de tout stocker en mémoire, ils peuvent traiter des fichiers énormes qui feraient planter d’autres outils. Ils peuvent aussi être étonnamment rapides.

Juste pour le plaisir, un exemple

Avec ces données

Apples,27,500,10.2,fruit,100,200,300
Chairs  1   501 123.78  furniture 101   201 301
Europe, 655, 502,0.0001,continent,   102, 202,302

nous pouvons produire cette sortie

fruit:Apples:10.2
furniture:Chairs:123.78
continent:Europe:0.0001

en utilisant cette commande

perl -l -n -e "print join(':',(split(/[, \t] */))[4,0,3])" *.txt

explication

élément
ce qu’il fait

-l
ajouter un saut de ligne après chaque print

-n
traiter ligne par ligne mais ne pas afficher implicitement

-e
ce qui suit est un programme à exécuter

print
afficher le résultat de l’expression suivante

join(":" liste)
créer une chaîne à partir d’une liste, utiliser “:” entre chaque élément

split (/expr/)
utiliser l’expression pour diviser la ligne en champs

[, \t]
soit une virgule, un espace ou une tabulation suivi de

* (espace astérisque)
0, 1 ou plusieurs espaces

(liste)[4,0,3]
sélectionner les 4e, 0e et 3e éléments d’une liste

Ce programme d’une seule ligne est équivalent au suivant, qui peut être plus facile à suivre

`#!perl
use warnings;
use strict;

while(<>) { # lire ligne par ligne toute l’entrée ou tous les fichiers listés
my @columns = split(/[, \t] */); # découper sur les espaces ou les virgules

(Réponse tronquée)