Parsing XML, JSON, dan format file data yang lebih baru di UNIX menggunakan utilitas baris perintah

9

Lingkungan Unix memiliki beberapa alat luar biasa untuk parsing teks dalam berbagai bentuk. Namun, akhir-akhir ini, data tidak dalam format tradisional (historis) (CSV, TSV, berbasis catatan atau berbasis pembatas lainnya) seperti dulu. Data hari ini dipertukarkan dalam format terstruktur seperti XML / JSON.

Saya tahu ada beberapa alat yang bagus seperti sed, awk dan Perl yang dapat mengunyah hampir semua bentuk data di luar sana. Namun, untuk bekerja dengan data terstruktur semacam ini, seringkali kita harus menulis program yang lengkap, dan, mengingat sedikit waktu yang tersedia untuk mengekstrak informasi, kita harus duduk dan mencari tahu seluruh logika dari apa yang ingin kita query dan taruh. secara terprogram. Terkadang ini tidak OK - pada dasarnya karena informasi yang diekstrak dari file-file tersebut bertindak sebagai input untuk pekerjaan lebih lanjut; juga karena waktu yang dibutuhkan untuk mencari solusi yang sesuai dan kode itu. Alat baris perintah diperlukan dengan sakelar yang cukup untuk menemukan, meminta dan membuang data.

Saya mencari alat yang mengambil XML / JSON atau bentuk lain dari data terstruktur dan membuangnya ke format lain seperti csv, dll., Sehingga dari sana orang dapat menggunakan perintah lain untuk mendapatkan informasi apa pun darinya.

Apakah ada utilitas baris perintah yang Anda tahu melakukan pekerjaan seperti ini? Apakah sudah ada skrip awk / Perl yang tersedia untuk ini?

kamaal
sumber

Jawaban:

5

untuk xml ada http://xmlstar.sourceforge.net/

XMLStarlet adalah seperangkat utilitas baris perintah (alat) yang dapat digunakan untuk mengubah, query, memvalidasi, dan mengedit dokumen dan file XML menggunakan set sederhana perintah shell dengan cara yang sama dilakukan untuk file teks biasa menggunakan UNIX grep, sed, perintah awk, diff, patch, join, dll.

Anda juga dapat menggunakan xsltprocdan alat serupa ( saxon).

untuk json: saya juga berpikir lebih baik menggunakan python, ruby, perl dan mengubahnya.

akira
sumber
jqadalah alat yang baik untuk mem
Kusalananda
4

Saya kira modul Perl, Python atau Ruby dapat digunakan dengan sukses untuk itu. Dan semua ini dapat digunakan untuk skrip.

alex
sumber
Maksud saya adalah untuk menghindari menulis skrip dan mencoba melakukannya menggunakan perintah. Menulis naskah akan mengalahkan seluruh tujuan pertanyaan ini.
kamaal
Apakah Anda mempertimbangkan ruby -e 'program text'"menulis naskah"?
alex
Saya pikir saya tidak mengerti Anda dengan benar. Di mana saya bisa mendapatkan 'teks program'?
kamaal
@kamaal: tak tahu. Google? Documents untuk bahasa skrip pilihan Anda? CPAN muncul dalam pikiran jika Anda menggunakan Perl.
alex
@kamaal: Saat format data semakin canggih, deskripsi operasi yang dilakukan semakin lama. Misalnya, perl -0777 -MJSON -e '$t=from_json(<STDIN>); do_something_with($t)'memungkinkan Anda memproses JSON dengan sedikit keributan. Anda masih harus memberi tahu komputer apa yang harus dilakukan dengan data tersebut.
Gilles 'SANGAT berhenti menjadi jahat'