มีคำสั่ง Unix / Linux เพื่อนับบรรทัดต่อวินาทีจาก stdin หรือไม่


22

ฉันพยายามนับจำนวนการสืบค้น SQL ต่อวินาทีจากล็อกไฟล์และฉันต้องการทำแบบเรียลไทม์โดยการวางท่อ stdout จาก grep ลงในคำสั่งบางคำสั่ง (ฉันกำลังทำการทดสอบประสิทธิภาพอยู่)

ฉันสามารถเขียนได้ด้วยตัวเอง แต่คิดว่านี่จะเป็นจริง

ฉันดูที่ wc แต่ไม่เห็นตัวเลือกให้อนุญาตสิ่งนี้

ฉันยังสามารถใช้มันเพื่อนับคำขอต่อวินาทีโดยการ pip หางจากบันทึกการเข้าถึง



ฉันกำลังมองหาบางสิ่งที่มีประโยชน์มากกว่าที่คำถามนั้นอ้างถึง
digidigo

คำตอบ:


2
watch -n 3 "wc -l logfile"

หน้าคน

ดู - รันโปรแกรมเป็นระยะโดยแสดงเอาต์พุตเต็มหน้าจอตามค่าเริ่มต้นโปรแกรมจะทำงานทุก 2 วินาที ใช้ -n หรือ - ช่วงเพื่อระบุช่วงเวลาที่แตกต่างกัน


45

pvเป็นคำสั่งของคุณ! P ipe V iewer พิมพ์สถิติเกี่ยวกับข้อมูลที่ผ่านมาและสามารถทำงานได้ทุกที่ในไปป์ไลน์ของคุณเนื่องจากจะส่งข้อมูลไปยัง stdout โดยตรง ตัวอย่างเช่น:

tail -f /var/log/nginx/access.log | pv --line-mode --rate > /dev/null

pvพิมพ์คำสั่งเพื่อ stderr หมายเลขปัจจุบันของสายต่อวินาที (ค่าเริ่มต้นคือไบต์ต่อวินาที) ซึ่งสำหรับแหล่งข้อมูลนี้โดยเฉพาะ (ล็อกไฟล์เริ่มต้นของ Nginx) เท่ากับหน้าเว็บที่เข้ามาต่อวินาที ฉันจะดูแลเกี่ยวกับการนับจำนวนเพื่อให้ท่อ stdout /dev/nullฉันเข้าไป นอกจากนี้ยังมีตัวเลือกเช่น:

  • -b (จำนวนบรรทัดทั้งหมด)
  • --average-rate (อัตราเฉลี่ยตั้งแต่เริ่มต้น) และ
  • --timer (ติดตามความยาวของท่อที่เกิดขึ้น)

หากคุณไม่บอกว่า--line-modeจะนับจำนวนไบต์ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการสำหรับบันทึกเซิร์ฟเวอร์ แต่อาจมีประโยชน์ในที่อื่น

Final note: ... | pv -lb > file.txtมีลักษณะคล้ายกันมาก... | tee file.txt | awk '{printf "\r%lu", NR}'ซึ่งมีประโยชน์สำหรับการนับจำนวนบรรทัด แต่การpvโทรสั้นลงอย่างมากแม้ว่าเอาต์พุตจะไม่น่าตื่นเต้นเท่าไหร่ - pvอัปเดตทุกวินาทีตามค่าเริ่มต้นในขณะที่awkคำสั่งนั้นจะอัปเดตอย่างต่อเนื่อง


เป็นไปได้ไหมที่จะรับค่าเดียวจาก pv? ฉันต้องการค่าเฉลี่ยสำหรับช่วงเวลาเพื่อวัตถุประสงค์ในการตรวจสอบ ดังนั้นฉันต้องกำหนดค่าให้กับตัวแปร
Sonique

@Sonique มันเป็นกระบองเพราะนั่นไม่ใช่สิ่งที่pvสร้างขึ้น (ฉันจะเข้าถึงawkถ้าเป็นคุณ) แต่แน่นอนว่ามันเป็นไปได้ สมมติว่าtwilight stream --timeout 5เป็นคำสั่งที่จะลิ้มลองจากทวิตเตอร์ spritzer 5 วินาทีแล้วออกจาก: RATE="$(twilight stream --timeout 5 | pv --line-mode --rate --force 2>&1 1>/dev/null | tr -s '\r\n' '\n' | tail -1)"แล้วecho $RATEผลิตบางอย่างเช่น "[40.8 / s]" (ทราบเพิ่มเติม--forceธงตั้งแต่pv's stderrไม่มี TTY)
chbrown

ดูเหมือนจะไม่ได้ทำงานอย่างน่าเชื่อถือสำหรับฉันสำหรับทุกโปรแกรม การลบการ> /dev/nullแสดงว่าเอาท์พุทตอนนี้ "บล็อก chunked" และไม่กระแสอีกต่อไปอย่างราบรื่น อาจunbufferจำเป็นสำหรับบางโปรแกรมที่ผลิตเพื่อที่พวกเขาจะไม่เปลี่ยนไปบล็อกการบัฟเฟอร์เอาต์พุตเมื่อตรวจพบว่ามีการไพพ์หรือไม่
nh2

13

บางทีคุณอาจจะลองlogtop?

tail -f foobar.log |logtop

นี่คือบันทึกบนสุดที่คุณอ้างอิงใช่หรือไม่ github.com/JulienPalard/logtop
digidigo

ใช่ถ้าคุณกำลังใช้เดเบียนมีแพคเกจในพื้นที่เก็บข้อมูลpackages.debian.org/wheezy/logtop
klocek

แดงฉันคิดว่านี่คือสิ่งที่ฉันต้องการ แต่ฉันไม่สามารถรวบรวม CentO ได้
digidigo

1
watch -n 5 "mysqladmin status | awk -F'  ' '{ print \$NF }'"

ฉันทำงานนี้ไม่ได้ คุณแน่ใจเกี่ยวกับไวยากรณ์หรือไม่
digidigo

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