ดึงบันทึก 100 บรรทัดล่าสุด


164

ฉันต้องการดึง 100 ท่อนสุดท้ายจากไฟล์บันทึก ฉันลองใช้คำสั่ง sed

sed -n -e '100,$p' logfilename

โปรดแจ้งให้ฉันทราบว่าฉันจะเปลี่ยนคำสั่งนี้เพื่อดึงข้อมูล100 บรรทัดล่าสุดได้อย่างไร


สิ่งนี้ถูกกล่าวถึงในคู่มือ: gnu.org/software/sed/manual/html_node/tail.html#tailว่า sed สามารถเลียนแบบหางได้อย่างไร
Lars Fischer

1
tail -f -n 100 logfilename
Amitesh Bharti

คำตอบ:


302

คุณสามารถใช้คำสั่งtailดังนี้

tail -100 <log file>   > newLogfile

ตอนนี้จะมี 100 บรรทัดสุดท้าย newLogfile

แก้ไข:

เวอร์ชันล่าสุดของ tail ดังกล่าวโดยคำสั่งtwalberg use:

tail -n 100 <log file>   > newLogfile

17
โปรดทราบว่าบางรุ่นที่ผ่านมาtailต้องใช้ไวยากรณ์tail -n 100 <filename>...
twalberg

14

ดู, สคริปต์ sed ที่พิมพ์ 100 บรรทัดสุดท้ายที่คุณสามารถหาได้ในเอกสารประกอบสำหรับ sed ( https://www.gnu.org/software/sed/manual/sed.html#tail ):

$ cat sed.cmd
1! {; H; g; }
1,100 !s/[^\n]*\n//
$p

$ sed -nf sed.cmd logfilename

สำหรับฉันมันยากกว่าสคริปต์ของคุณมาก

tail -n 100 logfilename

ง่ายกว่ามาก และมันค่อนข้างมีประสิทธิภาพมันจะไม่อ่านไฟล์ทั้งหมดหากไม่จำเป็น ดูคำตอบของฉันด้วยรายงาน strace สำหรับtail ./huge-file: /unix/102905/does-tail-read-the-whole-file/102910#102910


13

"tail" คือคำสั่งให้แสดงส่วนสุดท้ายของไฟล์การใช้สวิตช์ที่มีอยู่จะช่วยให้เราได้ผลลัพธ์ที่เฉพาะเจาะจงมากขึ้น สวิตช์ที่ใช้มากที่สุดสำหรับฉันคือ -n และ -f

สรุป

หาง [-F | -f | -r] [-q] [-b number | -c number | หมายเลข -n] [ไฟล์ ... ]

ที่นี่

จำนวน -n: สถานที่ตั้งเป็นเส้นจำนวน

-f: อ็อพชัน -f ทำให้ tail ไม่หยุดเมื่อถึงจุดสิ้นสุดไฟล์ แต่จะรอข้อมูลเพิ่มเติมเพื่อผนวกเข้ากับอินพุต อ็อพชัน -f ถูกละเว้นหากอินพุตมาตรฐานเป็นไพพ์ แต่ไม่ใช่ถ้าเป็น FIFO

ดึงบันทึก 100 บรรทัดล่าสุด

To get last static 100 lines  
     tail -n 100 <file path>

To get real time last 100 lines
     tail -f -n 100 <file path>

3

ฉันรู้ว่ามันเก่ามาก แต่สำหรับใครก็ตามที่มันอาจช่วยได้

less +F my_log_file.log

นั่นเป็นเพียงพื้นฐานโดยมีน้อยคุณสามารถทำสิ่งที่มีประสิทธิภาพมากขึ้น เมื่อคุณเริ่มเห็นบันทึกที่คุณสามารถทำการค้นหาได้ให้ไปที่หมายเลขบรรทัดค้นหารูปแบบยิ่งไปกว่านั้นจะเร็วกว่าสำหรับไฟล์ขนาดใหญ่

มันเหมือนเสียงเรียกเข้าสำหรับท่อนซุง [โดยสิ้นเชิงความคิดเห็นของฉัน]

เอกสารต้นฉบับของLess Less : https://linux.die.net/man/1/less

cheatsheet ที่น้อยลง: https://gist.github.com/glnds/8862214


1
len=`cat filename | wc -l`
len=$(( $len + 1 ))
l=$(( $len - 99 ))
sed -n "${l},${len}p" filename

บรรทัดแรกใช้ความยาว (จำนวนบรรทัดทั้งหมด) ของไฟล์จากนั้น +1 ในบรรทัดทั้งหมดหลังจากนั้นเราต้อง fatch 100 เร็กคอร์ดดังนั้น -99 จากความยาวทั้งหมดจากนั้นใส่ตัวแปรในคำสั่ง sed เพื่อดึง 100 บรรทัดสุดท้ายจากไฟล์

ฉันหวังว่านี่จะช่วยคุณได้

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