Analyser XML, JSON et les nouveaux formats de fichiers de données sous UNIX à l'aide des utilitaires de ligne de commande

9

L'environnement Unix possède d'excellents outils pour analyser le texte sous diverses formes. Cependant, récemment, les données ne sont pas dans les formats traditionnels (historiques) (CSV, TSV, basés sur des enregistrements ou d'autres délimiteurs) qu'elles étaient auparavant. De nos jours, les données sont échangées dans des formats structurés comme XML / JSON.

Je sais qu'il existe de bons outils comme sed, awk et Perl qui peuvent détruire presque toutes les formes de données. Cependant, pour travailler avec ce type de données structurées, il faut souvent écrire un programme complet et, compte tenu du peu de temps disponible pour extraire des informations, il faut s'asseoir et comprendre toute la logique de ce que l'on veut interroger et mettre vers le bas par programme. Parfois, ce n'est pas OK - essentiellement parce que les informations extraites de ces fichiers agissent comme entrées pour d'autres travaux; également en raison du temps qu'il faut pour rechercher la solution appropriée et la coder. Un outil de ligne de commande est nécessaire avec suffisamment de commutateurs pour rechercher, interroger et vider les données.

Je suis à la recherche d'outils qui prennent un XML / JSON ou d'autres formes de données structurées et le vident dans d'autres formats comme csv, etc., afin qu'à partir de là, on puisse utiliser d'autres commandes pour obtenir des informations.

Y a-t-il des utilitaires de ligne de commande que vous connaissez qui font ce genre de travail? Existe-t-il déjà des scripts awk / Perl disponibles pour cela?

kamaal
la source

Réponses:

5

pour xml il y a http://xmlstar.sourceforge.net/

XMLStarlet est un ensemble d'utilitaires (outils) de ligne de commande qui peuvent être utilisés pour transformer, interroger, valider et modifier des documents et des fichiers XML à l'aide d'un ensemble simple de commandes shell de la même manière que pour les fichiers en texte brut utilisant UNIX grep, sed, commandes awk, diff, patch, join, etc.

vous pouvez également utiliser xsltprocdes outils similaires ( saxon).

pour json: je pense aussi qu'il vaut mieux utiliser simplement python, ruby, perl et le transformer.

akira
la source
jqest un bon outil pour analyser JSON dans le shell: stedolan.github.io/jq
Kusalananda
4

Je suppose que les modules Perl, Python ou Ruby peuvent être utilisés avec succès pour cela. Et n'importe lequel d'entre eux peut être utilisé pour l'écriture de scripts.

alex
la source
Mon but était d'éviter d'écrire un script et d'essayer de le faire en utilisant une commande à la place. L'écriture du script ira à l'encontre du but de cette question.
kamaal
Pensez-vous ruby -e 'program text'"écrire un script"?
alex
Je pense que je ne vous ai pas bien compris. Où puis-je obtenir le «texte du programme»?
kamaal
@kamaal: dunno. Google? Des documents pour le langage de script de votre choix? CPAN me vient à l'esprit si vous utilisez Perl.
alex
@kamaal: À mesure que le format des données devient plus sophistiqué, les descriptions des opérations à effectuer s'allongent. Par exemple, perl -0777 -MJSON -e '$t=from_json(<STDIN>); do_something_with($t)'vous permet de traiter JSON avec un minimum de tracas. Vous devez toujours dire à l'ordinateur quoi faire avec les données.
Gilles 'SO- arrête d'être méchant'