Tôi phải xử lý các tệp văn bản thuần túy rất lớn (trên 10 gigabyte, vâng tôi biết nó phụ thuộc vào những gì chúng ta nên gọi lớn), với các dòng rất dài.sed tối ưu hóa (chỉnh sửa tập tin lớn dựa trên số liệu nhỏ hơn)
Nhiệm vụ gần đây nhất của tôi liên quan đến một số chỉnh sửa dòng dựa trên dữ liệu từ một tệp khác.
Tệp dữ liệu (cần được sửa đổi) chứa 1500000 dòng, mỗi dòng trong số đó là ví dụ: 800 ký tự dài. Mỗi dòng là duy nhất và chỉ chứa một số nhận dạng, mỗi số nhận dạng là duy nhất)
Tệp bổ trợ là ví dụ: 1800 dòng dài, chứa số nhận dạng và số lượng và ngày cần được sửa đổi trong tệp dữ liệu.
Tôi vừa chuyển đổi (với Vim regex) tệp sửa đổi thành sed, nhưng nó rất không hiệu quả.
Hãy nói rằng tôi có một dòng như thế này trong các tập tin dữ liệu:
(some 500 character)id_number(some 300 character)
Và tôi cần phải sửa đổi dữ liệu trong phần 300 char.
Dựa trên các tập tin sửa đổi, tôi đưa ra dòng sed như thế này:
/id_number/ s/^\(.\{650\}\).\{20\}/\1CHANGED_AMOUNT_AND_DATA/
Vì vậy, tôi có 1800 dòng như thế này.
Nhưng tôi biết, mà ngay cả trên máy chủ rất nhanh, nếu tôi làm một
sed -i.bak -f modifier.sed data.file
Nó rất chậm, bởi vì nó có để đọc tất cả các mẫu x mỗi dòng.
Không có cách nào tốt hơn?
Lưu ý: Tôi không phải là lập trình viên, chưa bao giờ học (ở trường) về thuật toán. Tôi có thể sử dụng awk, sed, một phiên bản lỗi thời của perl trên máy chủ.
phiên bản cho perl là gì? –
perl 5.8.6 i586-linux-thread-multi –
Đó là * một phiên bản lỗi thời perl, nhưng tôi nghi ngờ không tệ như mọi người đã kết luận từ ghi chú của bạn;) – user55400