Tôi có một tệp phát triển khoảng 200.000 dòng mỗi ngày và tất cả được tạo thành với các khối gồm ba dòng như sau:
1358726575123 # key
Joseph Muller # name
carpenter # job
9973834728345
Andres Smith
student
7836472098652
Mariah Anthony
dentist
Bây giờ, tôi có một tệp khác mà tôi trích xuất khoảng 10.000 mẫu chính, chẳng hạn như 1358726575123
. Sau đó, tôi chạy một for
vòng lặp với các mẫu này và phải kiểm tra chúng với tệp đầu tiên. Nếu tệp không chứa mẫu đó, tôi lưu mẫu trong tệp thứ ba để xử lý thêm:
for number in $(grep -o '[0-9]\{12\}' file2); do # finds about 10.000 keys
if ! grep -q ^$number$ file1; then # file1 is a huge file
printf "$number\n" >>file3 # we'll process file3 later
fi
done
Mã ví dụ thu được một tệp khổng lồ 10.000 lần và tôi chạy vòng lặp này khoảng một lần một phút, trong cả ngày .
Vì tệp khổng lồ tiếp tục phát triển, tôi có thể làm gì để làm cho tất cả điều này nhanh hơn và tiết kiệm một số CPU? Tôi tự hỏi liệu sắp xếp tệp bằng cách nào đó bằng khóa của nó (nếu vậy, làm thế nào?) Hoặc sử dụng db thay vì văn bản thuần túy sẽ giúp ...