Pour quelqu'un qui travaille avec d'énormes fichiers texte sous Unix/Linux/Mac/Cygwin. Si vous utilisez Windows, consultez cette page sur les outils Linux dans Windows : https://stackoverflow.com/questions/3519738/what-is-the-best-way-to-use-linux-utilities-under-Windows .
On peut suivre ce flux de travail pour avoir de bonnes performances :
- compresser avec gzip
- utiliser zindex (sur github : https://github.com/mattgodbolt/zindex ) pour indexer le fichier avec clé appropriée
- interroger le fichier indexé avec
zq
du paquet.
Citation de son readme github :
Création d'un index
zindex a besoin de savoir quelle partie de chaque ligne constitue l'index. Cela peut être fait par une expression régulière, par champ, ou en faisant passer chaque ligne par un programme externe. ligne à travers un programme externe.
Par défaut, zindex crée un index de fichier.gz.zindex lorsqu'on lui demande d'indexer un fichier.gz. indexer le fichier .gz.
Ejemplo:
créer un index sur les lignes correspondant à une régularité numérique numérique régulière. Le groupe de capture indique la partie qui doit être indexée, et les options montrent que chaque ligne a un index numérique unique.
$ zindex file.gz --regex 'id:([0-9]+)' --numeric --unique
Exemple : créer un index sur le deuxième champ d'un fichier CSV :
$ zindex file.gz --delimiter , --field 2
Ejemplo:
créer un index sur un champ JSON orderId.id dans n'importe quel élément de la racine du document. actions de la racine du document (nécessite jq). La requête jq crée un tableau de tous les champs orderId.ids, puis les joint avec un espace pour s'assurer que chaque ligne individuelle ligne individuelle envoyée à jq crée une seule ligne de sortie, avec des correspondances multiples séparées par des espaces (ce qui est le cas pour la requête jq). séparées par des espaces (qui est le séparateur par défaut).
$ zindex file.gz --pipe "jq --raw-output --unbuffered '[.actions[].orderId.id] | join(\" \")'"
Interroger l'index
Le programme zq est utilisé pour interroger un index. On lui donne le nom de l'index fichier compressé et une liste de requêtes. Par exemple :
$ zq file.gz 1023 4443 554
Il est également possible d'effectuer une sortie par ligne afin d'imprimer les lignes 1 et 1000 d'un fichier :
$ zq file.gz --line 1 1000