पूंछ में नई लाइनों की गिनती के लिए कैसे देखें


9

मैं कुछ इस तरह करना चाहता हूं:

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

यह प्रत्येक सेकंड पूंछ की नई लाइनों को गिनता है

/ लिनक्स, सेंटो

अधिक स्पष्ट होना। मुझे कुछ इस तरह मिला है:

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

मैं कुछ त्रुटि संदेश पढ़ रहा हूं। और अब मैं उन्हें गिनना चाहता हूं। एक सेकंड में मुझे कितनी ~ त्रुटियां मिली हैं। तो लॉग में एक पंक्ति किसी त्रुटि में एक त्रुटि है।


तुम क्या करने की कोशिश कर रहे हो? यदि आप संलग्न लाइनों को देखना चाहते हैं, तो यह tail -f /path/to/fileअकेले उपयोग करने के लिए पर्याप्त है । यदि आप फ़ाइल लाइनें देखना चाहते हैं, तो आप उपयोग कर सकते हैं watch wc -l /path/to/file
खालिद

@ परेशान, मुझे यह देखने की जरूरत है कि कितनी नई लाइनें जोड़ी गईं
fl00r

मैं कई फाइलों के लिए रेगेक्स के साथ पूंछ का उपयोग करता हूं, और मैं यह देखना चाहता हूं कि एक बार के माध्यम से इन सभी फाइलों को कितनी लाइनें जोड़ दी जाती हैं
fl00r

1
Hmpfh। tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? फिर गणित करते हैं।
ccc

@cjc यह काम करता है, धन्यवाद! :) आपको इसे
एब्स

जवाबों:


24

मैंने हाल ही में pv की खोज की है, और यह वास्तव में अच्छा है, आप कुछ ऐसा कर सकते हैं

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

  • -i2 = हर 2 सेकंड की गिनती करें
  • -एल = गिनती लाइनों
  • -टी = प्रिंट समय
  • -आर = शो रेट

3

यहाँ एक त्वरित और गंदी विधि है। आप मूल रूप से tailऔर watch wcअलग हिस्सों में तोड़ना चाहते हैं , और कुछ ऐसा करना चाहते हैं:

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

किस बिंदु पर, आप एक त्रुटि / सेकंड संख्या प्राप्त करने के लिए गणित कर सकते हैं। लेकिन, यदि आप केवल अपनी त्रुटि दर के एक-बंद परीक्षा के लिए ऐसा कर रहे हैं, तो त्वरित-और-गंदा काफी अच्छा हो सकता है।


3

यदि pv उपलब्ध नहीं है तो यह पर्ल के साथ किया जा सकता है:

हर एक सेकंड:

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) ऐसा नहीं है कि ओपी देख रहा है और 2) nlऐसा करेगा, न कि कॉल आउट प्रति पर्ल की आवश्यकता है।
EEAA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.