Análisis de XML, JSON y formatos de archivos de datos más recientes en UNIX utilizando utilidades de línea de comandos

9

El entorno Unix tiene algunas herramientas excelentes para analizar texto en varias formas. Sin embargo, en los últimos tiempos, los datos no están en los formatos tradicionales (históricos) (CSV, TSV, basados ​​en registros o en algún otro delimitador) que solían tener antes. Los datos de estos días se intercambian en formatos estructurados como XML / JSON.

Sé que hay algunas buenas herramientas como sed, awk y Perl que pueden eliminar casi cualquier tipo de datos. Sin embargo, para trabajar con este tipo de datos estructurados, a menudo uno tiene que escribir un programa completo y, dado el poco tiempo disponible para extraer información, uno tiene que sentarse y descubrir la lógica completa de lo que uno quiere consultar y poner hacia abajo programáticamente. A veces esto no está bien, básicamente porque la información extraída de esos archivos actúa como entradas para el trabajo posterior; también por el tiempo que lleva buscar la solución adecuada y codificarla. Se necesita una herramienta de línea de comandos con suficientes interruptores para buscar, consultar y volcar datos.

Estoy buscando herramientas que tomen un XML / JSON u otras formas de datos estructurados y los descarguen en otros formatos como csv, etc., para que a partir de ahí se puedan usar otros comandos para obtener información.

¿Hay alguna utilidad de línea de comandos que conozca que haga este tipo de trabajo? ¿Ya hay scripts awk / Perl disponibles para esto?

kamaal
fuente

Respuestas:

5

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

XMLStarlet es un conjunto de utilidades de línea de comandos (herramientas) que se pueden usar para transformar, consultar, validar y editar documentos y archivos XML utilizando un conjunto simple de comandos de shell de forma similar a como se hace para archivos de texto sin formato con UNIX grep, sed, Comandos awk, diff, patch, join, etc.

También puede usar xsltprocherramientas similares ( saxon).

para json: también creo que es mejor usar python, ruby, perl y transformarlo.

akira
fuente
jqes una buena herramienta para analizar JSON en el shell: stedolan.github.io/jq
Kusalananda
4

Supongo que los módulos Perl, Python o Ruby se pueden usar con éxito para eso. Y cualquiera de estos se puede utilizar para crear secuencias de comandos.

alex
fuente
Todo mi punto era evitar escribir un script e intentar hacerlo usando un comando en su lugar. Escribir el guión derrotará todo el propósito de esta pregunta.
kamaal
¿Consideras ruby -e 'program text'"escribir un guión"?
alex
Creo que no te entendí bien. ¿Dónde puedo obtener el 'texto del programa'?
kamaal
@kamaal: no sé. Google? ¿Documentos para tu lenguaje de script preferido? CPAN viene a la mente si estás usando Perl.
alex
@kamaal: a medida que el formato de datos se vuelve más sofisticado, las descripciones de las operaciones a realizar se hacen más largas. Por ejemplo, le perl -0777 -MJSON -e '$t=from_json(<STDIN>); do_something_with($t)'permite procesar JSON con un mínimo de alboroto. Todavía tiene que decirle a la computadora qué hacer con los datos de alguna manera.
Gilles 'SO- deja de ser malvado'