XML, JSON ve daha yeni veri dosyası biçimlerini komut satırı yardımcı programlarını kullanarak UNIX'te ayrıştırma


9

Unix ortamında, metni çeşitli şekillerde ayrıştırmak için bazı mükemmel araçlar vardır. Ancak, son zamanlarda veriler daha önce olduğu gibi geleneksel (geçmiş) formatlarda (CSV, TSV, kayıt tabanlı veya diğer bazı sınırlayıcı tabanlı) değildir. Bu günlerde veriler, XML / JSON gibi yapılandırılmış biçimlerde değiş tokuş edilmektedir.

Sed, awk ve Perl gibi neredeyse her türlü veriyi çiğneyebilen iyi araçlar olduğunu biliyorum. Bununla birlikte, bu tür yapılandırılmış verilerle çalışmak için, çoğu zaman tam bir program yazmak zorundadır ve bilgi elde etmek için çok az zaman verildiğinde, birisinin oturması ve sorgulamak ve koymak istediği şeyin tüm mantığını anlaması gerekir. programlı olarak kapatın. Bazen bu sorun olmaz - temelde bu dosyalardan çıkarılan bilgiler daha fazla çalışma için girdi görevi görür; ayrıca uygun çözümü aramak ve kodlamak için gereken zamandan dolayı. Verileri bulmak, sorgulamak ve dökümü için yeterli anahtarlara sahip bir komut satırı aracına ihtiyaç vardır.

Ben bir XML / JSON veya yapılandırılmış veri diğer biçimleri almak ve oradan herhangi bir bilgi almak için diğer komutları kullanabilirsiniz böylece csv, vb gibi diğer biçimlere dökmek araçları arıyorum.

Bu tür bir işi yapan tanıdığınız herhangi bir komut satırı yardımcı programı var mı? Bunun için zaten awk / Perl betikleri var mı?

Yanıtlar:


5

xml için http://xmlstar.sourceforge.net/ var

XMLStarlet, basit kabuk komutları kümesini kullanarak, UNIX grep, sed, awk, diff, patch, join, etc komutları.

xsltprocve benzeri araçları da kullanabilirsiniz ( saxon).

json için: ben de sadece python, yakut, perl kullanmak ve dönüştürmek daha iyi olduğunu düşünüyorum.


jqJSON kabuğunda ayrıştırmak için iyi bir araçtır: stedolan.github.io/jq
Kusalananda

4

Bunun için Perl, Python veya Ruby modülleri başarıyla kullanılabilir. Ve bunlardan herhangi biri komut dosyası oluşturmak için kullanılabilir.


Bütün mesele bir senaryo yazmaktan kaçınmak ve bunun yerine bir komut kullanarak bunu yapmaktı. Senaryoyu yazmak bu sorunun tüm amacını bozacaktır.
kamaal

ruby -e 'program text'"Senaryo yazmayı" düşünüyor musunuz ?
alex

Sanırım seni doğru anlamadım. 'Program metni' nereden bulabilirim?
kamaal

@kamaal: dunno. Google? Seçtiğiniz komut dosyası diliniz için dokümanlar mı? Perl kullanıyorsanız CPAN akla geliyor.
alex

@kamaal: Veri formatı daha karmaşık hale geldikçe, gerçekleştirilecek işlemlerin açıklamaları uzar. Örneğin, perl -0777 -MJSON -e '$t=from_json(<STDIN>); do_something_with($t)'JSON'u en az yaygarayla işleyebilmenizi sağlar. Yine de bilgisayara bir şekilde verilerle ne yapacağını söylemelisiniz.
Gilles 'SO- kötülüğü durdurun'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.