Làm cách nào để xóa các dòng trùng lặp trong tệp văn bản nhiều GB lớn?


16

Câu hỏi của tôi tương tự như câu hỏi này nhưng với một vài ràng buộc khác nhau:

  • Tôi có một \ndanh sách từ được phân cách lớn - một từ trên mỗi dòng. Kích thước của các tệp từ 2 GB đến lớn nhất là 10 GB.
  • Tôi cần phải loại bỏ bất kỳ dòng trùng lặp.
  • Quá trình có thể sắp xếp danh sách trong quá trình loại bỏ các bản sao nhưng không bắt buộc.
  • Có đủ không gian trên phân vùng để giữ danh sách từ duy nhất mới xuất ra.

Tôi đã thử cả hai phương pháp này nhưng cả hai đều thất bại với lỗi bộ nhớ.

sort -u wordlist.lst > wordlist_unique.lst
awk '!seen[$0]++' wordlist.lst > wordlist_unique.lst
awk: (FILENAME=wordlist.lst FNR=43601815) fatal: assoc_lookup: bucket-ahname_str: can't allocate 10 bytes of memory (Cannot allocate memory)

Những cách tiếp cận khác tôi có thể thử?


Hãy xem giải pháp bằng cách sử dụng awk unix.stackexchange.com/a/30178/56820
ezdazuzena

Câu trả lời:


18

Hãy thử sử dụng sort với tùy chọn -o/ --output=FILEthay vì chuyển hướng đầu ra. Bạn cũng có thể thử thiết lập buffer-sizevới -S/ --buffer-size=SIZE. Ngoài ra, hãy thử -s/ --stable. Và đọc trang người đàn ông, nó cung cấp tất cả các thông tin tôi đã cung cấp.

Lệnh đầy đủ bạn có thể sử dụng có thể hoạt động cho những gì bạn đang làm:

sort -us -o wordlist_unique.lst wordlist.lst

Bạn cũng có thể muốn đọc URL sau:

http://www.gnu.org/s/coreutils/manual/html_node/sort-invocation.html

Điều đó giải thích cặn kẽ hơn so với trang người đàn ông.


cảm ơn vì lời đề nghị, không may sử dụng --output vẫn không khắc phục được lỗi hết bộ nhớ. Chạy mà vẫn cho tôi sort: write failed: /root/tmp/sortVxscLn: No space left on device. Vấn đề là một chút khó chịu ở chỗ nó không thất bại ngay lập tức. Có vẻ như bạn phải đợi bộ nhớ cạn kiệt trước khi nó bị lỗi.
Greatwolf

8
@Victor T.: Đó không phải là lỗi hết bộ nhớ, mà là lỗi hết dung lượng đĩa. Là / root trên một hệ thống tập tin khác với dữ liệu của bạn? Nếu vậy, hãy sử dụng tùy chọn -T / - thư mục tạm thời sortđể sử dụng hệ thống tệp có nhiều không gian trống hơn.
camh

@camh cảm ơn mà đã lừa. Không nhận ra bạn có thể chỉ định sử dụng bộ đệm trung gian nào.
Greatwolf
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.