ตัวอย่าง: แอปพลิเคชันสร้างไฟล์บันทึกข้อความขนาดใหญ่A
พร้อมข้อความที่แตกต่างกันมากมาย มันสร้างไฟล์บันทึกที่มีขนาดใหญ่คล้ายกันB
เมื่อทำงานไม่ถูกต้อง
ผมต้องการที่จะเห็นสิ่งที่ข้อความในไฟล์จะเป็นคนใหม่เป็นหลักคือเพื่อกรองเอาทุกอย่างจากB
A
ต้นแบบเล็กน้อยคือ
- จัดเรียง | เปิดทั้งสองไฟล์
- เข้าร่วมไฟล์
- จัดเรียง | uniq -c
- grep -v "^ 2"
สิ่งนี้สร้างความแตกต่างแบบสมมาตรและไม่สะดวก ทำอย่างไรให้ดีขึ้น? (รวมถึงความแตกต่างที่ไม่สมมาตรและการเก็บรักษาลำดับข้อความไว้B
)
โปรแกรมควรวิเคราะห์A
และเรียนรู้ว่าข้อความใดเป็นเรื่องธรรมดาจากนั้นวิเคราะห์การB
แสดงด้วยข้อความที่ต้องการความสนใจ
โดยหลักการแล้วมันควรละเว้นสิ่งต่าง ๆ โดยอัตโนมัติเช่นการประทับเวลาหมายเลขบรรทัดหรือสิ่งที่เปลี่ยนแปลงได้อื่น ๆ
ตัวอย่าง. A:
0:00:00.234 Received buffer 0x324234
0:00:00.237 Processeed buffer 0x324234
0:00:00.238 Send buffer 0x324255
0:00:03.334 Received buffer 0x324255
0:00:03.337 Processeed buffer 0x324255
0:00:03.339 Send buffer 0x324255
0:00:05.171 Received buffer 0x32421A
0:00:05.173 Processeed buffer 0x32421A
0:00:05.178 Send buffer 0x32421A
B:
0:00:00.134 Received buffer 0x324111
0:00:00.137 Processeed buffer 0x324111
0:00:00.138 Send buffer 0x324111
0:00:03.334 Received buffer 0x324222
0:00:03.337 Processeed buffer 0x324222
0:00:03.338 Error processing buffer 0x324222
0:00:03.339 Send buffer 0x3242222
0:00:05.271 Received buffer 0x3242FA
0:00:05.273 Processeed buffer 0x3242FA
0:00:05.278 Send buffer 0x3242FA
0:00:07.280 Send buffer 0x3242FA failed
ผลลัพธ์:
0:00:03.338 Error processing buffer 0x324222
0:00:07.280 Send buffer 0x3242FA failed
วิธีหนึ่งในการแก้ปัญหาอาจเป็นดังนี้:
- แยกแต่ละบรรทัดไปยังหน่วยตรรกะ:
0:00:00.134 Received buffer 0x324111
,0:00:00.134
,Received
,buffer
,0x324111
,324111
,Received buffer
,\d:\d\d:\d\d\.\d\d\d
,\d+:\d+:\d+.\d+
,0x[0-9A-F]{6}
, ... มันควรจะหาคำแต่ละรูปแบบที่เรียบง่ายในจำนวนรูปแบบที่พบบ่อย (เช่น "วันที่บางกว่าข้อความกว่าจำนวนกว่าข้อความกว่า end_of_line") นอกจากนี้ยังมี จัดการรวมกันของด้านบน เนื่องจากไม่ใช่งานง่ายการช่วยเหลือผู้ใช้ (เพิ่ม regexes อย่างชัดเจนโดยไม่สนใจว่า "ทำให้ปัจจัยหลัก", "ไม่แยกเป็นส่วน", "พิจารณาเป็นวันที่ / หมายเลข", "ดูแลคำสั่ง / ปริมาณ ของกฎ "ข้อความดังกล่าว) ควรได้รับการสนับสนุน (แต่ไม่จำเป็น) - ค้นหาหน่วยที่เกิดซ้ำและบรรทัด "จัดหมวดหมู่" กรองสิ่งที่ระเหยง่ายเกินไปเช่นการประทับเวลาที่อยู่หรือหมายเลขบรรทัด
- วิเคราะห์ไฟล์ที่สองค้นหาสิ่งต่าง ๆ ที่มีหน่วยทางลอจิคัลใหม่ (ครั้งเดียวหรือเกิดขึ้นอีกครั้ง) หรืออะไรก็ตามที่จะ "ทำให้ประหลาดใจ" ระบบที่เคยชินกับไฟล์แรก
ตัวอย่างการทำสิ่งนี้ด้วยตนเอง:
$ cat A | head -n 1
0:00:00.234 Received buffer 0x324234
$ cat A | egrep -v "Received buffer" | head -n 1
0:00:00.237 Processeed buffer 0x324234
$ cat A | egrep -v "Received buffer|Processeed buffer" | head -n 1
0:00:00.238 Send buffer 0x324255
$ cat A | egrep -v "Received buffer|Processeed buffer|Send buffer" | head -n 1
$ cat B | egrep -v "Received buffer|Processeed buffer|Send buffer"
0:00:03.338 Error processing buffer 0x324222
0:00:07.280 Send buffer 0x3242FA failed
นี่เป็นสิ่งที่น่าเบื่อ (มีข้อความหลายประเภท); นอกจากนี้ฉันยังสามารถรวมรูปแบบที่กว้างเกินไปโดยไม่ตั้งใจได้ด้วย นอกจากนี้มันไม่สามารถจัดการสิ่งที่ซับซ้อนเช่นความสัมพันธ์ระหว่างข้อความ
ฉันรู้ว่ามันเกี่ยวข้องกับ AI อาจมีเครื่องมือที่พัฒนาแล้วหรือไม่?