Làm thế nào để theo dõi số lượng dòng mới ở đuôi


9

Tôi muốn làm một cái gì đó như thế này:

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

Nó đếm các dòng đuôi mới mỗi giây

/ Linux, CentO

Để rõ ràng hơn. Tôi đã có một cái gì đó như thế này:

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

Tôi đang đọc một số thông báo lỗi. Và bây giờ tôi muốn đếm chúng. Có bao nhiêu lỗi ~ tôi đã có trong một giây. Vì vậy, một dòng trong một bản ghi là một lỗi trong một bộ xử lý.


Bạn đang cố làm gì vậy? Nếu bạn muốn xem các dòng được nối thêm, nó là đủ để sử dụng tail -f /path/to/filemột mình. Nếu bạn muốn xem dòng tập tin, bạn có thể sử dụng watch wc -l /path/to/file.
Khaled

@Khaled, tôi cần xem có bao nhiêu dòng mới được thêm vào
fl00r

Tôi sử dụng đuôi với regex cho một số tệp và tôi muốn xem có bao nhiêu dòng được thêm vào tất cả các tệp này trong một thời gian
fl00r

1
Hmpfh. tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? Rồi làm toán.
cjc

@cjc nó hoạt động, cảm ơn! :) bạn nên xem nó như câu trả lời ab
fl00r

Câu trả lời:


24

Gần đây tôi đã phát hiện ra pv, và nó thực sự rất tuyệt, bạn có thể làm một cái gì đó như

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

  • -i2 = đếm cứ sau 2 giây
  • -l = đếm dòng
  • -t = thời gian in
  • -r = tỷ lệ hiển thị

3

Đây là một phương pháp nhanh chóng và bẩn thỉu. Về cơ bản, bạn muốn chia phần tailwatch wcthành các phần riêng biệt và làm một cái gì đó như:

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

tại điểm nào, bạn có thể làm toán để nhận được số lỗi / giây. Nhưng, nếu bạn chỉ thực hiện việc này để kiểm tra một lần về tỷ lệ lỗi của mình, thì nhanh và bẩn có thể đủ tốt.


3

Trong trường hợp pv không có sẵn, nó có thể được thực hiện với perl:

Mỗi giây:

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

Cứ sau 10 giây

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

Đầu ra mẫu:

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

Bạn có thể thử một cái gì đó như thế này:

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

Nó in số dòng ở phía trước của mỗi dòng.


1) Đó không phải là những gì OP đang tìm kiếm và 2) nlsẽ làm điều này, không yêu cầu gọi ra perl.
EEAA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.