ag (the_silver_searcher) ไม่ค้นหาไฟล์ทั้งหมด - มีขนาดอินพุตสูงสุดโดยนัยหรือไม่?


3

ฉันมีไฟล์ข้อความขนาดใหญ่มาก (หลายกิกะไบต์) ซึ่งฉันต้องการค้นหาสตริงบางอย่าง เมื่อใช้grepฉันได้รับมากกว่า 11,000 แมตช์ของสตริง แต่มีag1,500 ประมาณ เอาต์พุตของทั้งสองคำสั่งนั้นเหมือนกันจนถึงจุดที่agหยุด

ฉันตระหนักถึง-mตัวเลือกในagการกำหนดจำนวนการจับคู่สูงสุด แต่ค่าเริ่มต้นคือ 10,000 และดังนั้นจึงไม่ใช่ปัญหา

เพื่อแสดงสิ่งนี้นี่คือตัวอย่างของสิ่งที่เกิดขึ้น:

$ grep -i 'string' hugefile.txt | wc -l
    11000
$ ag -i 'string' hugefile.txt | wc -l
    1500

เอาต์พุตของทั้งสองคำสั่งนั้นเหมือนกับจำนวนที่ตรงกันเท่ากัน:

$ grep -m 1500 -i 'string' hugefile.txt > grep_output.txt
$ ag --no-numbers -i 'string' hugefile.txt > ag_output.txt

$ diff grep_output.txt ag_output.txt

(files identical)

ไม่agได้มีการป้อนข้อมูลขนาดสูงสุดโดยปริยายและถ้าเป็นเช่นนั้นก็เป็นไปได้ที่จะปรับเปลี่ยนนี้หรือไม่?


กันที่นี่ ยกเว้นไฟล์ของฉันมีเพียง 1.5 GB ด้วย Grep มันจะช้ากว่า แต่เสร็จสมบูรณ์: /
Mailo Světel

คำตอบ:


0

เป็นไปได้หรือไม่ว่าคุณมีการเข้าชมหลายครั้ง (โดยเฉลี่ย 6 ถึง 7) ต่อบรรทัด?

หากเป็นเช่นนั้นวิธีการด้านบนในการนับพวกเขานั้นผิด: มันนับเฉพาะการแข่งขันที่มี แต่ไม่ตรงกัน ดังนั้นถ้าถึงขีด จำกัด ของ 10000 ตรงกับที่มีอยู่แล้วหลังจากที่ 1500 สายตรงกับคุณจะได้รับผลดังกล่าวข้างต้นและมันจะถูกต้อง

นอกจากนี้ความหมายของgrep'และag' s -mตัวเลือกที่ดูเหมือนจะแตกต่างกัน:

  • สำหรับgrepมันนับสูงสุดของสายการอ่าน: หยุดอ่านไฟล์หลังจาก NUM เส้นจับคู่
  • แต่agเนื่องจากเป็นจำนวนการจับคู่สูงสุด: ข้ามไฟล์ที่เหลือหลังจากการจับคู่ NUM ครั้ง

ดังนั้นผมจึงสงสัยว่าคุณเคยตีวงเงินสูงสุดเริ่มต้นของการแข่งขันและต้องเพิ่มค่าส่งผ่านไปยังตัวเลือกของ-mag

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.