Tôi đang tìm kiếm một trình soạn thảo văn bản windows (có thể là 64 bit) cho phép tôi loại bỏ các dòng trùng lặp khỏi một tệp văn bản cực lớn (4GB +).
Bạn sử dụng gì để loại bỏ các dòng trùng lặp khỏi các tệp văn bản lớn của bạn?
Tôi đang tìm kiếm một trình soạn thảo văn bản windows (có thể là 64 bit) cho phép tôi loại bỏ các dòng trùng lặp khỏi một tệp văn bản cực lớn (4GB +).
Bạn sử dụng gì để loại bỏ các dòng trùng lặp khỏi các tệp văn bản lớn của bạn?
Câu trả lời:
Cổng gốc Win32 tiện dụng sort
có trong UnxUtils
Đối với các ý nghĩa phức tạp hơn của "loại bỏ trùng lặp" có Perl (et al).
Nếu bạn có Cygwin hoặc MinGW, bạn có thể hoàn thành việc này với
cat file | sort | uniq >> outfile
giả sử bạn muốn dòng duy nhất. Tôi không biết điều này sẽ thực hiện như thế nào, vì việc sắp xếp một tập dữ liệu lớn có thể sẽ mất nhiều thời gian (hoặc nếu nó đã được sắp xếp, bạn có thể bỏ phần đó ra) hoặc chính xác, các lệnh này hoạt động như thế nào (nếu chúng sẽ tiêu tốn 4GB ram hay không).
Tôi cũng đã đăng câu trả lời này lên một câu hỏi trùng lặp về các tệp> 50 GB
Giả sử tất cả các dòng ngắn hơn 7kB và bạn đã cài đặt bash, dd, tail, head, sed và sort từ cygwin / unix:
{
i=0
while LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
| LANG= sed -e '1d' -e '$d' | LANG= sort -u ;
do
i=$((1+$i))
done
LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
| LANG= tail -n 1
LANG= head -n 1 large_text_file
} | LANG= sort -u > your_result
Điều này phân chia tệp theo từng phần 1024000 byte và cũng thêm 3 * 7 * 1024 byte ("21" trong 1021) từ đoạn tiếp theo. Vì các bộ phận có thể cắt một dòng, dòng đầu tiên (1d) và cuối cùng ($ d) của mỗi thân cây bị phá hủy (sed).
Vì vậy, để bù lại, một cái gì đó chứa đoạn cuối cùng được trích xuất lại và chỉ dòng cuối cùng của nó được giữ lại (đuôi -n 1), và dòng đầu tiên cũng được trích xuất lại (đầu -n 1).
Khi vòng lặp thất bại, đoạn cuối cùng đã được trích xuất.
sort -u có thể được xem như một máy nén, nhưng nó chỉ sắp xếp đầu vào của nó sau đó bỏ qua các bản sao. "Sắp xếp" đầu tiên nén tất cả các khối. Thứ hai sort
nén một lần nữa các phép nối của tất cả các khối này (và thứ hai sort
đã bị thiếu từ mã trên kể từ lần chỉnh sửa thứ ba, xin lỗi).
Bạn đã nói tệp văn bản, nhưng dù sao tôi cũng giả sử nhị phân, do đó LANG = (cũng nhanh hơn).