क्या स्टड से प्रति सेकंड लाइनों की गणना करने के लिए एक यूनिक्स / लिनक्स कमांड है?


22

मैं एक लॉग फ़ाइल से प्रति सेकंड SQL प्रश्नों की संख्या की गणना करने की कोशिश कर रहा हूं और मैं इसे वास्तविक समय में कुछ कमांड में grep से stdout पाइपिंग करके करना चाहता हूं। (मैं कुछ प्रदर्शन परीक्षण कर रहा हूं)

मैं इसे स्वयं लिख सकता था, लेकिन यह सुनिश्चित करने के लिए सोचा था कि यह मौजूद होगा।

मैंने wc को देखा, लेकिन इसे अनुमति देने का विकल्प नहीं देखा।

मैं इसका उपयोग एक्सेस लॉग से एक पूंछ को पाइप करके प्रति सेकंड अनुरोधों को गिनने के लिए भी कर सकता था।



मैं कुछ और अधिक सामान्य रूप से उपयोगी खोज रहा हूं जो उस प्रश्न को संदर्भित करता है।
डिजीडिगो

जवाबों:


2
watch -n 3 "wc -l logfile"

आदमी पेज

घड़ी - समय-समय पर एक कार्यक्रम निष्पादित करें, आउटपुट फुलस्क्रीन दिखा रहा है डिफ़ॉल्ट रूप से, कार्यक्रम हर 2 सेकंड चलाया जाता है; एक अलग अंतराल निर्दिष्ट करने के लिए -n या --interval का उपयोग करें।


45

pvआपकी आज्ञा है! पी ipe वी iewer इसके माध्यम से गुजरने वाले डेटा के बारे में आँकड़े प्रिंट करता है, और आपकी पाइपलाइन में कहीं भी चल सकता है, क्योंकि यह सीधे स्टडआउट पर स्टड करता है। उदाहरण के लिए:

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

pvआदेश प्रिंट प्रति सेकंड लाइनों की वर्तमान संख्या, (डिफ़ॉल्ट बाइट प्रति सेकंड है) stderr करने के लिए जो, इस विशेष डेटा स्रोत (Nginx के डिफ़ॉल्ट लॉग फ़ाइल) के लिए प्रति सेकंड भेजे वेब अनुरोध के बराबर है। मैं केवल काउंट्स की परवाह करता हूं, इसलिए मैं स्टडआउट करता हूं /dev/null। इसके भी विकल्प हैं:

  • -b (कुल पंक्तियों की संख्या),
  • --average-rate (शुरू करने के बाद से औसत दर), और
  • --timer (यह पता चलता है कि पाइप कितनी देर तक चल रहा है)।

यदि आप नहीं कहते हैं --line-mode, तो यह बाइट्स की गणना करेगा, जो कि शायद आप सर्वर लॉग के लिए नहीं चाहते हैं, लेकिन कहीं और काम कर सकते हैं।

अंतिम नोट: ... | pv -lb > file.txtबहुत पसंद है ... | tee file.txt | awk '{printf "\r%lu", NR}', जो लाइनों की गिनती के लिए भी आसान है, लेकिन pvकॉल कम है, हालांकि आउटपुट काफी रोमांचक नहीं है - pvहर सेकंड डिफ़ॉल्ट रूप से awkअपडेट होता है , जबकि वह कमांड लगातार अपडेट होता है।


क्या pv से केवल एक मूल्य प्राप्त करना संभव है? मुझे निगरानी के उद्देश्य के लिए समय अवधि के लिए औसत मूल्य की आवश्यकता है। इसलिए मुझे वैरिएबल को मान असाइन करने की आवश्यकता है।
सोनिक

@ यह एक कीचड़ है, क्योंकि यह वह नहीं है जिसके pvलिए बनाया गया है ( awkयदि मैं आपके लिए होता तो मैं पहुंचता ), लेकिन निश्चित रूप से यह संभव है। मान लीजिए twilight stream --timeout 5एक आदेश है कि 5 सेकंड के लिए ट्विटर spritzer से नमूना और फिर छोड़ दिया है: 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 / एस]" (अतिरिक्त ध्यान दें --forceझंडा, के बाद से pvकी 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
क्लोसेक

मुझे लगता है कि यह वही है जो मुझे चाहिए, लेकिन मैं इसे सेंटो पर संकलित करने के लिए नहीं मिला
digidigo

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

मुझे यह काम नहीं मिला। आप वाक्य रचना के बारे में निश्चित हैं?
डिजीडिगो

आपको कौन सी त्रुटि मिलती है? क्या आपने पासवर्ड के लिए संकेत दिए बिना ~/.my.cnfचलाने के लिए कॉन्फ़िगर किया है mysqladmin?
क्वांटा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.