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)