Analizowanie XML, JSON i nowszych formatów plików danych w systemie UNIX za pomocą narzędzi wiersza polecenia

9

Środowisko Unix ma doskonałe narzędzia do analizowania tekstu w różnych formach. Jednak ostatnio dane nie są w tradycyjnych (historycznych) formatach (CSV, TSV, oparte na rekordach lub innych bazujących na ogranicznikach), jak kiedyś. Obecnie dane są wymieniane w ustrukturyzowanych formatach, takich jak XML / JSON.

Wiem, że istnieje kilka dobrych narzędzi, takich jak sed, awk i Perl, które mogą odgryźć prawie każdą formę danych. Jednak, aby pracować z tego rodzaju uporządkowanymi danymi, często trzeba napisać kompletny program, a biorąc pod uwagę mało czasu dostępnego do wyodrębnienia informacji, należy usiąść i odkryć całą logikę tego, co chcemy zapytać i umieścić programowo. Czasami nie jest to w porządku - po prostu dlatego, że informacje wyodrębnione z tych plików stanowią dane wejściowe do dalszej pracy; także ze względu na czas potrzebny do znalezienia odpowiedniego rozwiązania i zakodowania go. Potrzebne jest narzędzie wiersza polecenia z wystarczającymi przełącznikami do wyszukiwania, wyszukiwania i zrzutu danych.

Szukam narzędzi, które pobierają XML / JSON lub inne formy danych strukturalnych i wrzucają je do innych formatów, takich jak csv itp., Aby stamtąd można było użyć innych poleceń, aby uzyskać z nich jakiekolwiek informacje.

Czy znasz jakieś narzędzia wiersza poleceń, które wykonują tego rodzaju pracę? Czy są już dostępne skrypty awk / Perl?

kamaal
źródło

Odpowiedzi:

5

dla xml jest http://xmlstar.sourceforge.net/

XMLStarlet to zestaw narzędzi (narzędzi) wiersza poleceń, których można używać do przekształcania, tworzenia zapytań, sprawdzania poprawności i edytowania dokumentów i plików XML za pomocą prostego zestawu poleceń powłoki w podobny sposób, jak w przypadku plików zwykłego tekstu za pomocą UNIX grep, sed, polecenia awk, diff, patch, join itp.

możesz także użyć xsltproci podobnych narzędzi ( saxon).

dla json: myślę też, że lepiej jest po prostu użyć Pythona, Ruby, Perla i przekształcić go.

akira
źródło
jqjest dobrym narzędziem do parsowania JSON w powłoce: stedolan.github.io/jq
Kusalananda
4

Myślę, że moduły Perla, Pythona lub Ruby mogą być z powodzeniem użyte do tego. I każdy z nich może być wykorzystany do tworzenia skryptów.

alex
źródło
Moim celem było uniknięcie napisania skryptu i próba zrobienia tego za pomocą polecenia. Napisanie scenariusza pokona cały cel tego pytania.
kamaal
Czy zastanawiasz się nad ruby -e 'program text'„pisaniem scenariusza”?
Alex
Myślę, że nie zrozumiałem cię właściwie. Gdzie mogę uzyskać „tekst programu”?
kamaal
@kamaal: dunno. Google? Dokumenty dla wybranego języka skryptowego? CPAN przychodzi na myśl, jeśli używasz Perla.
alex
@kamaal: Ponieważ format danych staje się coraz bardziej wyrafinowany, opisy operacji do wykonania stają się dłuższe. Na przykład perl -0777 -MJSON -e '$t=from_json(<STDIN>); do_something_with($t)'pozwala przetwarzać JSON przy minimum zamieszania. Nadal musisz jakoś powiedzieć komputerowi, co zrobić z danymi.
Gilles „SO- przestań być zły”