วิธีดูการนับบรรทัดใหม่ที่หาง


9

ฉันต้องการทำสิ่งนี้:

watch tail -f | wc -l
#=> 43
#=> 56
#=> 61
#=> 44
#=> ...

มันนับเส้นหางใหม่ทุกวินาที

/ Linux, CentOs

เพื่อความชัดเจนมากขึ้น ฉันมีบางอย่างเช่นนี้:

tail -f /var/log/my_process/*.log | grep error

ฉันกำลังอ่านข้อความผิดพลาด และตอนนี้ฉันต้องการนับพวกเขา ฉันมีข้อผิดพลาด ~ กี่ครั้งในไม่กี่วินาที ดังนั้นหนึ่งบรรทัดในบันทึกคือหนึ่งข้อผิดพลาดในการดำเนินการ


คุณพยายามจะทำอะไร? หากคุณต้องการดูบรรทัดต่อท้ายก็เพียงพอที่จะใช้tail -f /path/to/fileเพียงอย่างเดียว watch wc -l /path/to/fileหากคุณต้องการที่จะดูบรรทัดของไฟล์ที่คุณสามารถใช้
เลด

@ Khaled ฉันต้องดูจำนวนบรรทัดใหม่ที่ถูกต่อท้าย
fl00r

ฉันใช้ tail กับ regex สำหรับไฟล์จำนวนหนึ่งและฉันต้องการดูว่ามีการต่อท้ายไฟล์จำนวนเท่าใดในไฟล์นี้ตลอดเวลา
fl00r

1
Hmpfh tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? จากนั้นทำคณิตศาสตร์
cjc

@cjc ใช้งานได้ขอบคุณ! :) คุณควรที่มันเป็นคำตอบ ab
fl00r

คำตอบ:


24

ฉันเพิ่งค้นพบ pv และมันเจ๋งจริงๆคุณสามารถทำอะไรบางอย่าง

tail -f logfile | pv -i2 -ltr > /dev/null

  • -i2 = นับทุก 2 วินาที
  • -l = นับจำนวนเส้น
  • -t = เวลาพิมพ์
  • -r = แสดงอัตรา

3

นี่เป็นวิธีที่รวดเร็วและสกปรก โดยพื้นฐานแล้วคุณต้องการแยกtailและwatch wcแยกส่วนออกเป็นส่วน ๆ และทำสิ่งที่ต้องการ:

tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines &
watch wc /tmp/error.lines

ณ จุดนี้คุณสามารถทำคณิตศาสตร์เพื่อรับหมายเลขข้อผิดพลาด / วินาที แต่ถ้าคุณเพียงแค่ทำเช่นนี้เพื่อตรวจสอบอัตราความผิดพลาดแบบครั้งเดียวการทำความสะอาดอย่างรวดเร็วและสกปรกอาจดีพอ


3

ในกรณีที่ pv ไม่พร้อมใช้งานสามารถทำได้ด้วย perl:

ทุก ๆ หนึ่งวินาที:

tail -f  recycleBack*out  | perl -e 'while (<>) {$l++;if (time > $e) {$e=time;$i++;print "$i=> $l\n";$l=0}}'

ทุกๆ 10 วินาที

tail -f  recycleBack*out  | perl -e 'while (<>) {$l++;if (time > $e+10) {$e=time;$i++;print "$i=> $l\n";$l=0}}'

ตัวอย่างผลลัพธ์:

1=> 1
2=> 1523
3=> 1339
4=> 1508
5=> 1785
6=> 1587
7=> 1770
8=> 1432
9=> 1339
10=> 1555
11=> 1663
12=> 1693
13=> 1647

-1

คุณสามารถลองสิ่งนี้:

tail -f /var/log/my_process/*.log | perl -pe '$_ = "$. $_"'

มันพิมพ์หมายเลขบรรทัดที่ด้านหน้าของแต่ละบรรทัด


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