2011-08-08 41 views
9

Tôi đã viết chương trình xử lý tệp và giờ nó cần đọc từ tệp được nén (tệp .gz đã giải nén có thể lớn tới 2TB),Sử dụng sed trên một tệp nén

Có một sed tương đương cho nén file như (zcat/mèo) hoặc nếu không những gì sẽ là phương pháp tốt nhất để làm những việc sau một cách hiệu quả

ONE=`zcat filename.gz| sed -n $counts` 

$ đếm: truy cập để đọc (từng dòng)

các phương pháp trên hoạt động, nhưng là khá làm chậm tệp lớn vì tôi cần phải đọc từng dòng và thực hiện khớp trên một số trường nhất định.

Cảm ơn

EDIT

Mặc dù không trực tiếp giúp đỡ, đây là một tập hợp các zcommands

http://www.cyberciti.biz/tips/decompress-and-expand-text-files.html

+1

Làm việc trên tệp nén sẽ chậm. – Nobody

+3

Ý kiến ​​của tôi là giải nén một tệp và đọc qua một đường ống ** là ** cách hiệu quả nhất để tạm thời mở tệp đã nén và nhận kết quả. Bạn không cần phải dành thời gian rezipping các tập tin khi bạn đang thực hiện. Nó có nhiều khả năng bạn có thể cải thiện hiệu quả của hoạt động tổng thể của bạn bằng cách chắc chắn mã 'sed' của bạn được tối ưu hóa hoàn toàn HOẶC nhiều khả năng sử dụng một trong những awk, perl, python để làm phép tính của bạn. Chúc may mắn. – shellter

+0

cảm ơn .. nếu không nén, kích thước tệp sẽ vượt qua 2TB .. do đó không khả thi đối với cơ sở hạ tầng của tôi .. – learner

Trả lời

3

Vâng bạn có thể có tốc độ nhanh hơn (tức là sử dụng file nén) hoặc miễn phí hơn không gian (ví dụ: sử dụng các tệp nén và đường ống bạn đã hiển thị) ... xin lỗi. Sử dụng các tập tin nén sẽ luôn luôn có một chi phí.

2

Nếu bạn hiểu cấu trúc bên trong của định dạng nén, bạn có thể viết trình ghép mẫu có thể hoạt động trên dữ liệu nén mà không giải nén hoàn toàn, mà thay vào đó chỉ cần xác định từ dữ liệu đã nén trong một phần dữ liệu được giải nén.

Nếu mẫu có bất kỳ sự phức tạp nào, điều này nghe có vẻ giống như một dự án phức tạp vì bạn phải xử lý các trường hợp mẫu có thể được thỏa mãn bằng kết hợp đầu ra từ hai (hoặc nhiều) phần giải nén riêng biệt.

Các vấn đề liên quan