Phân tích cú pháp XML, JSON và các định dạng tệp dữ liệu mới hơn trong UNIX bằng các tiện ích dòng lệnh


9

Môi trường Unix có một số công cụ tuyệt vời để phân tích văn bản dưới nhiều hình thức khác nhau. Tuy nhiên, về muộn, dữ liệu không ở các định dạng truyền thống (lịch sử) (CSV, TSV, dựa trên hồ sơ hoặc một số dựa trên dấu phân cách khác) trước đây. Dữ liệu ngày nay được trao đổi theo các định dạng có cấu trúc như XML / JSON.

Tôi biết có một số công cụ tốt như sed, awk và Perl có thể nhai gần như mọi dạng dữ liệu ngoài kia. Tuy nhiên, để làm việc với loại dữ liệu có cấu trúc này, người ta thường phải viết một chương trình hoàn chỉnh và, với ít thời gian có sẵn để trích xuất thông tin, người ta phải ngồi xuống và tìm ra toàn bộ logic của những gì người ta muốn truy vấn và đặt nó lập trình xuống Đôi khi điều này không ổn - về cơ bản vì thông tin được trích xuất từ ​​các tệp đó đóng vai trò là đầu vào cho công việc tiếp theo; cũng vì thời gian cần thiết để tìm kiếm giải pháp thích hợp và mã hóa nó. Một công cụ dòng lệnh là cần thiết với các công tắc đủ để tìm, truy vấn và kết xuất dữ liệu.

Tôi đang tìm kiếm các công cụ lấy XML / JSON hoặc các dạng dữ liệu có cấu trúc khác và chuyển nó sang các định dạng khác như csv, v.v., để từ đó người ta có thể sử dụng các lệnh khác để lấy bất kỳ thông tin nào từ đó.

Có bất kỳ tiện ích dòng lệnh nào bạn biết trong đó thực hiện loại công việc này không? Đã có các kịch bản awk / Perl có sẵn cho điều này?

Câu trả lời:


5

đối với xml có http://xmlstar.sourceforge.net/

XMLStarlet là một tập hợp các tiện ích (công cụ) dòng lệnh có thể được sử dụng để chuyển đổi, truy vấn, xác thực và chỉnh sửa các tài liệu và tệp XML bằng cách sử dụng bộ lệnh shell đơn giản theo cách tương tự được thực hiện cho các tệp văn bản đơn giản bằng UNIX grep, sed, các lệnh awk, diff, patch, tham gia, v.v.

bạn cũng có thể sử dụng xsltprocvà các công cụ tương tự ( saxon).

cho json: tôi cũng nghĩ tốt hơn là chỉ sử dụng python, ruby, perl và biến đổi nó.


jqlà một công cụ tốt để phân tích JSON trong shell: stedolan.github.io/jq
Kusalananda

4

Tôi đoán các mô-đun Perl, Python hoặc Ruby có thể được sử dụng thành công cho điều đó. Và bất kỳ trong số này có thể được sử dụng cho kịch bản.


Toàn bộ quan điểm của tôi là tránh viết một kịch bản và cố gắng thực hiện nó bằng cách sử dụng một lệnh thay thế. Viết kịch bản sẽ đánh bại toàn bộ mục đích của câu hỏi này.
kamaal

Bạn có xem xét ruby -e 'program text'"viết một kịch bản"?
alex

Tôi nghĩ rằng tôi đã không hiểu bạn đúng. Tôi có thể lấy 'văn bản chương trình' ở đâu?
kamaal

@kamaal: dunno. Google? Tài liệu cho ngôn ngữ kịch bản của bạn lựa chọn? CPAN xuất hiện trong tâm trí nếu bạn đang sử dụng Perl.
alex

@kamaal: Khi định dạng dữ liệu trở nên tinh vi hơn, các mô tả về các hoạt động để thực hiện sẽ lâu hơn. Ví dụ: perl -0777 -MJSON -e '$t=from_json(<STDIN>); do_something_with($t)'cho phép bạn xử lý JSON với mức tối thiểu phiền phức. Bạn vẫn phải nói cho máy tính biết phải làm gì với dữ liệu bằng cách nào đó.
Gilles 'SO- đừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.