Розбір XML, JSON та новіших форматів файлів даних у UNIX за допомогою утиліт командного рядка


9

У середовищі Unix є чудові інструменти для розбору тексту в різних формах. Однак, пізно, дані не є у традиційних (історичних) форматах (CSV, TSV, на основі записів чи інших обмежувачів), як це було раніше. Ці дані обмінюються в такі структуровані формати, як XML / JSON.

Я знаю, що є кілька хороших інструментів, таких як sed, awk і Perl, які можуть пережовувати майже будь-які форми даних там. Однак, щоб працювати з подібними структурованими даними, часто доводиться писати повну програму, і, враховуючи мало часу, необхідного для вилучення інформації, треба сісти і розібратися з усією логікою того, що хочеться запитувати і ставити це програматично. Іноді це не в порядку - в основному тому, що інформація, витягнута з цих файлів, діє як вхід для подальшої роботи; також через час, який потрібен на пошук відповідного рішення та кодування його. Інструмент командного рядка потрібен з достатніми комутаторами для пошуку, запиту та скидання даних.

Я шукаю інструменти, які беруть XML / JSON або інші форми структурованих даних і скидають його в інші формати, такі як csv тощо, щоб звідти можна було використовувати інші команди, щоб отримати з нього будь-яку інформацію.

Чи є утиліти командного рядка, з яких ви знаєте, які виконують цю роботу? Чи вже доступні сценарії awk / Perl для цього?

Відповіді:


5

для xml є http://xmlstar.sourceforge.net/

XMLStarlet - це набір утиліт (інструментів) командного рядка, які можна використовувати для перетворення, запиту, перевірки та редагування XML-документів і файлів за допомогою простого набору команд оболонки аналогічним чином, як це робиться для файлів із звичайним текстом за допомогою UNIX grep, sed, команд awk, diff, виправлення, з'єднання тощо.

ви також можете використовувати xsltprocі подібні інструменти ( saxon).

для json: я також думаю, що краще просто використовувати python, ruby, perl та трансформувати його.


jqє гарним інструментом для розбору JSON в оболонці: stedolan.github.io/jq
Kusalananda

4

Я думаю, що для цього можна успішно використовувати модулі Perl, Python або Ruby. І будь-яке з них можна використовувати для сценаріїв.


Вся моя суть полягала в тому, щоб уникати написання сценарію і намагатися зробити це, використовуючи команду. Написання сценарію переможе всю ціль цього питання.
kamaal

Чи вважаєте ви ruby -e 'program text'"написання сценарію"?
алекс

Я думаю, я тебе не зрозумів належним чином. Де я можу отримати текст програми?
kamaal

@kamaal: dunno. Google? Документи для мови вибору сценарію? CPAN приходить на думку, якщо ви використовуєте Perl.
alex

@kamaal: Оскільки формат даних стає все більш досконалим, описи виконуваних операцій стають довшими. Наприклад, perl -0777 -MJSON -e '$t=from_json(<STDIN>); do_something_with($t)'дозволяє обробляти JSON з мінімальними суєтами. Ви все ще повинні сказати комп’ютеру, що робити з даними якось.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.