การแยกวิเคราะห์ 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 โดยใช้ชุดคำสั่งเชลล์แบบง่าย ๆ ในลักษณะเดียวกันกับไฟล์ข้อความธรรมดาโดยใช้ grep, sed, awk, diff, patch, join, etc คำสั่ง

คุณสามารถใช้xsltprocและเครื่องมือที่คล้ายกัน ( saxon)

สำหรับ json: ฉันคิดว่ามันดีกว่าที่จะใช้ python, ruby, perl และแปลงมัน


jqเป็นเครื่องมือที่ดีสำหรับการวิเคราะห์ JSON ในเชลล์: stedolan.github.io/jq
Kusalananda

4

ฉันเดาว่าโมดูล Perl, Python หรือ Ruby สามารถใช้ได้สำเร็จ และสิ่งเหล่านี้สามารถใช้สำหรับการเขียนสคริปต์


จุดทั้งหมดของฉันคือการหลีกเลี่ยงการเขียนสคริปต์และลองทำโดยใช้คำสั่งแทน การเขียนสคริปต์จะเอาชนะจุดประสงค์ทั้งหมดของคำถามนี้
kamaal

คุณคิดว่าruby -e 'program text'"การเขียนสคริปต์" หรือไม่?
alex

ฉันคิดว่าฉันไม่เข้าใจคุณอย่างถูกต้อง ฉันจะรับ 'ข้อความโปรแกรม' ได้จากที่ใด
kamaal

@kamaal: ดันโน Google? เอกสารสำหรับภาษาสคริปต์ที่คุณเลือก? CPAN คำนึงถึงถ้าคุณใช้ Perl
alex

@kamaal: เนื่องจากรูปแบบข้อมูลมีความซับซ้อนมากขึ้นคำอธิบายของการดำเนินการเพื่อให้ทำงานได้นานขึ้น ตัวอย่างเช่นperl -0777 -MJSON -e '$t=from_json(<STDIN>); do_something_with($t)'ให้คุณประมวลผล JSON ด้วยความยุ่งยากน้อยที่สุด คุณยังต้องบอกคอมพิวเตอร์ว่าจะทำอย่างไรกับข้อมูลอย่างใด
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.