ฉันมีไฟล์ที่เติบโตประมาณ 200,000 บรรทัดต่อวันและมันถูกสร้างขึ้นด้วยบล็อกสามบรรทัดเช่น:
1358726575123 # key
Joseph Muller # name
carpenter # job
9973834728345
Andres Smith
student
7836472098652
Mariah Anthony
dentist
ตอนนี้ผมมีไฟล์อื่นจากที่ผมดึงประมาณ 10,000 1358726575123
รูปแบบที่สำคัญเช่น จากนั้นฉันเรียกใช้for
ลูปที่มีรูปแบบเหล่านี้และต้องตรวจสอบกับไฟล์แรก หากไฟล์ไม่มีรูปแบบดังกล่าวฉันบันทึกรูปแบบในไฟล์ที่สามเพื่อการประมวลผลเพิ่มเติม:
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
รหัสตัวอย่าง greps ไฟล์ขนาดใหญ่ 10,000 ครั้งและผมทำงานเกี่ยวกับวงนี้นาทีละครั้งในช่วงตลอดทั้งวัน
เนื่องจากไฟล์ขนาดใหญ่ยังคงเติบโตฉันจะทำอย่างไรเพื่อให้ทั้งหมดนี้เร็วขึ้นและประหยัด CPU บ้าง ฉันสงสัยว่าการเรียงลำดับไฟล์ตามคีย์ (ถ้าเป็นเช่นนั้นได้อย่างไร) หรือการใช้ db แทนที่จะเป็นข้อความธรรมดาจะช่วยได้ ...