Stdin'den saniyede satır saymak için bir Unix / Linux komutu var mı?


22

Bir günlük dosyasından saniyede SQL sorgu sayısını saymaya çalışıyorum ve stdout komutunu grep komutundan bazı komutlara geçirerek gerçek zamanlı olarak yapmak istiyorum. (Bazı performans testleri yapıyorum)

Kendim yazabilirim, ancak bunun olacağından eminim.

WC'ye baktım ama buna izin verecek bir seçenek görmedim.

Ayrıca, erişim kütüğünden bir kuyruk geçirerek saniyedeki istekleri saymak için de kullanabilirim.



Bu sorunun ne anlama geldiğine dair daha faydalı bir şey arıyorum.
digidigo

Yanıtlar:


2
watch -n 3 "wc -l logfile"

man sayfa

izle - düzenli aralıklarla bir program yürüt, çıktı tam ekran gösteriliyor Varsayılan olarak, program her 2 saniyede bir çalıştırılır; Farklı bir aralık belirtmek için -n veya --interval komutunu kullanın.


45

pvsenin emrin P ipe V toplayıcısı, içinden geçen verilerle ilgili istatistikleri yazdırır ve doğrudan stdout'a yönlendirildiği için boru hattınızda herhangi bir yerde çalışabilir. Örneğin:

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

pvKomut baskılar saniyede hatların mevcut sayısını, (varsayılan saniyede bayt) stderr hangi bu özel veri kaynağı (Nginx varsayılan günlük dosyası) için saniyede gelen web istekleri İçin eşittir. Sadece sayıları önemsiyorum, bu yüzden içine sızıyordum /dev/null. Gibi seçenekler de vardır:

  • -b (toplam satır sayısı),
  • --average-rate (başlangıçtan beri ortalama oran) ve
  • --timer (borunun ne kadar zamandır gittiğini izler).

Diyorsunuz yoksa --line-mode, bu sunucu günlükleri için istediğini muhtemelen değil, hangi byte sayarız ama kullanışlı başka bir yerde olabilir.

Son Not: ... | pv -lb > file.txtgibi bir çok şey var ... | tee file.txt | awk '{printf "\r%lu", NR}'da çizgileri saymak için kullanışlıdır, ama pvçağrı çıkışı oldukça heyecanlı olduğu olmasa, yolu kısadır - pvyani ederken, varsayılan olarak her saniye günceller awkkomut güncellemeleri sürekli.


Pv'den sadece bir değer elde etmek mümkün mü? İzleme amacıyla zaman aralığı için ortalama bir değere ihtiyacım var. Bu yüzden değişkene değer atamam gerekiyor.
Sonique,

@Sonique bu bir çamurluk, çünkü bunun pviçin inşa edilmedi (senin için olsaydım ulaşırdım awk), ama elbette mümkün. Diyelim ki twilight stream --timeout 5Twitter spritzerinden 5 saniye boyunca örnek alacak ve sonra çıkacak bir komuttur: RATE="$(twilight stream --timeout 5 | pv --line-mode --rate --force 2>&1 1>/dev/null | tr -s '\r\n' '\n' | tail -1)"sonra echo $RATE"[40.8 / s]" gibi bir şey üretir ( s , artık bir TTY olmadığı için ek --forcebayrağa dikkat edin ). pvstderr
chbrown

Tüm programlar için benim için güvenilir bir şekilde çalışmıyor; > /dev/nullçıktının şimdi "blok öbek" olduğunu ve artık düzgün şekilde akmadığını göstererek kaldırıyor . Belki de unbufferbazı programlar üreten programlara ihtiyaç duyuluyor, bu yüzden borulandıklarını tespit ettiklerinde çıktı tamponlamayı engellemiyorlar.
nh2


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

Bunu işe alamadım. Sözdizimi hakkında emin misiniz?
digidigo

Hangi hatayı alıyorsun? Şifre sormadan ~/.my.cnfçalışacak mysqladminşekilde yapılandırdınız mı ?
Kuantum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.