sed -n '10000000,10000020p' filename
คุณอาจสามารถเร่งความเร็วได้เช่นนี้:
sed -n '10000000,10000020p; 10000021q' filename
ในคำสั่งเหล่านั้นตัวเลือก-n
ทำให้sed
"ระงับการพิมพ์พื้นที่รูปแบบอัตโนมัติ" p
คำสั่ง "พิมพ์ [s] พื้นที่รูปแบบปัจจุบัน" และq
"คำสั่งทันทีเลิก [s] สคริปต์ sed โดยไม่ต้องประมวลผลการป้อนข้อมูลใด ๆ เพิ่มเติม ..." คำพูดมาจากหน้าsed
man
โดยวิธีการที่คำสั่งของคุณ
tail -n 10000000 filename | head 10
เริ่มต้นที่บรรทัดที่สิบล้านจากจุดสิ้นสุดของไฟล์ในขณะที่คำสั่ง "กลาง" ของคุณดูเหมือนจะเริ่มต้นที่สิบล้านจากจุดเริ่มต้นซึ่งจะเทียบเท่ากับ:
head -n 10000010 filename | tail 10
ปัญหาคือไฟล์ที่ไม่ได้เรียงลำดับที่มีบรรทัดความยาวผันแปรได้กระบวนการใดก็ตามที่จะต้องผ่านการนับบรรทัดใหม่ ทางลัดสำหรับวิธีนี้ไม่มีทาง
อย่างไรก็ตามหากไฟล์ถูกเรียงลำดับ (เช่นล็อกไฟล์ที่มีการประทับเวลา) หรือมีเส้นความยาวคงที่คุณสามารถค้นหาไฟล์ตามตำแหน่งไบต์ ในตัวอย่างไฟล์บันทึกคุณสามารถทำการค้นหาแบบไบนารีสำหรับช่วงเวลาหนึ่งตามที่สคริปต์ Python ของฉันที่นี่ * ทำ ในกรณีของไฟล์ความยาวบันทึกคงที่มันง่ายจริงๆ คุณเพียงแค่ค้นหาlinelength * linecount
ตัวละครลงในไฟล์
* ฉันตั้งใจจะโพสต์และอัปเดตสคริปต์อื่นอีกครั้ง บางทีฉันอาจจะได้รอบหนึ่งวันนี้