แมว Unix เริ่มต้นจากบรรทัด


40

เป็นวิธีที่ดีที่สุดในการส่งออกจากไฟล์เริ่มต้นจากบรรทัดที่ระบุคืออะไร (ขนาดใหญ่เช่น 70000) สิ่งที่ต้องการ:

cat --line=70000 <file>

คำตอบ:


60

ลองดูหางอย่างแม่นยำยิ่งขึ้นนั่นคือ --lines = + N switch:

tail --lines=+100 <file>

ว้าว. ฉันไม่รู้สิ่งนี้แม้จะใช้สิ่งนี้บน linux เป็นเวลา 8 ปี! ฉันใช้ bash fn เสมอ! ขอบคุณมาก! getFromLine () {lineno = wc -l $1 | awk '{print $1}'; lineno = expr $lineno - $2; หาง -n $ lineno $ 1; }
secureBadshah

2
สิ่งนี้ไม่สามารถใช้กับ Mountain Lion (เคอร์เนลดาร์วินเวอร์ชัน 13.1.0) รูปแบบสำหรับ Lion Mountain คือtail -n
Kaushik Ghose

22

tailวิธีที่ชัดเจนที่สุดคือ ไวยากรณ์อาจแตกต่างกันเล็กน้อยขึ้นอยู่กับระบบปฏิบัติการที่คุณใช้:

tail -n +70000

หากคุณไม่สามารถtailทำงานได้คุณสามารถใช้งานsedได้ แต่อาจช้าลง:

sed -pe '1,69999d'

tailทำงานได้ดีในMinGW (ในไฟล์ข้อความ 600 MB) รันไทม์เพียงไม่กี่วินาที (แต่ไฟล์อินพุตอาจมีอยู่ในแคชไฟล์แล้ว)
ปีเตอร์มอร์เทนเซ่น

2

หากแทนที่จะเป็นหมายเลขบรรทัดคุณต้องเริ่มรายการที่บรรทัดที่มีการระบุ$phraseลองต่อไปนี้

more -1000 +/"$phrase" yourfilename | sed '1,4d'

-1000 จะแสดงข้อความอย่างต่อเนื่องสูงสุดถึง 1,000 บรรทัด; คุณสามารถเปลี่ยนแปลงได้ตามต้องการ sedคำสั่งจะตัดครั้งแรก 4 สายของการส่งออกซึ่งถูกแทรกโดยอัตโนมัติโดยmoreมีบรรทัดว่างข้อความ "... ข้าม" และทั้งสองเส้นบรรทัดก่อนเริ่มต้นของคุณตั้งใจ ฉันเดาว่าสิ่งนี้อาจแตกต่างกันไปขึ้นอยู่กับระบบของคุณ


2

คุณสามารถใช้พารามิเตอร์NRด้วยคำสั่งawk :

cat <file> | awk '{if (NR>=7000) print}'

2
คุณสามารถใช้คำสั่งนี้กับข้อ จำกัด อื่น ๆ ตัวอย่าง: cat messages | awk '{if (NR>=7000 && NR <7003) print}'แสดงแถวที่ 7000, 7001 และ 7002 เท่านั้น
Gefolge

-1

2
ลิงค์ที่น่าสนใจ แต่ไม่ได้ให้ข้อมูลใด ๆ ที่ใช้กับคำถามนี้และtailคำแนะนำของคุณเหมือนกับคำตอบที่ได้รับการยอมรับและคำตอบอื่น ๆ เมื่อหลายสัปดาห์ก่อน ทำไมต้องโพสต์
ต้มตุ๋น Quixote

ลิงก์ใช้งานไม่ได้ -...can't find the server at www.scripterworld.com.
Peter Mortensen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.