Analisando XML, JSON e formatos de arquivo de dados mais recentes no UNIX usando utilitários de linha de comando

9

O ambiente Unix possui excelentes ferramentas para analisar texto de várias formas. No entanto, ultimamente, os dados não estão nos formatos tradicionais (históricos) (CSV, TSV, baseados em registros ou outros delimitadores) que costumavam ser antes. Atualmente, os dados são trocados em formatos estruturados como XML / JSON.

Eu sei que existem algumas boas ferramentas como sed, awk e Perl que podem mastigar praticamente qualquer forma de dados por aí. No entanto, para trabalhar com esse tipo de dados estruturados, muitas vezes é preciso escrever um programa completo e, dado o pouco tempo disponível para extrair informações, é preciso sentar e descobrir toda a lógica do que se deseja consultar e colocar. programaticamente. Às vezes, isso não é bom - basicamente porque as informações extraídas desses arquivos funcionam como entradas para trabalhos futuros; também devido ao tempo necessário para procurar a solução apropriada e codificá-la. É necessária uma ferramenta de linha de comando com opções suficientes para localizar, consultar e despejar dados.

Estou procurando ferramentas que pegam um XML / JSON ou outras formas de dados estruturados e os despejam em outros formatos como csv etc., para que a partir daí possa-se usar outros comandos para extrair informações.

Você conhece algum utilitário de linha de comando que faça esse tipo de trabalho? Já existem scripts awk / Perl disponíveis para isso?

kamaal
fonte

Respostas:

5

para xml existe http://xmlstar.sourceforge.net/

O XMLStarlet é um conjunto de utilitários de linha de comando (ferramentas) que podem ser usados ​​para transformar, consultar, validar e editar documentos e arquivos XML usando um conjunto simples de comandos shell da mesma maneira que é feito para arquivos de texto sem formatação usando UNIX grep, sed, comandos awk, diff, patch, join, etc.

você também pode usar xsltprocferramentas semelhantes ( saxon).

para json: também acho melhor usar python, ruby, perl e transformá-lo.

akira
fonte
jqé uma boa ferramenta para analisar JSON no shell: stedolan.github.io/jq
Kusalananda
4

Eu acho que os módulos Perl, Python ou Ruby podem ser usados ​​com sucesso para isso. E qualquer um desses pode ser usado para scripts.

alex
fonte
Meu objetivo era evitar escrever um script e tentar fazê-lo usando um comando. Escrever o roteiro derrotará todo o propósito desta pergunta.
Kamaal
Você considera ruby -e 'program text'"escrever um script"?
alex
Eu acho que não te entendi direito. Onde posso obter o 'texto do programa'?
Kamaal #
@kamaal: dunno. Google? Documentos para sua linguagem de script preferida? O CPAN vem à mente se você estiver usando o Perl.
alex
@ kamaal: À medida que o formato dos dados fica mais sofisticado, as descrições das operações a serem executadas ficam mais longas. Por exemplo, perl -0777 -MJSON -e '$t=from_json(<STDIN>); do_something_with($t)'permite processar JSON com um mínimo de problemas. Você ainda precisa informar ao computador o que fazer com os dados de alguma forma.
Gilles 'SO- stop be evil'