Portál AbcLinuxu, 19. dubna 2024 07:07


Dotaz: jak z textu vypsat pouze cast

17.8.2007 09:56 Jirka
jak z textu vypsat pouze cast
Přečteno: 341×
Odpovědět | Admin
Nazdarek, potrebuji zjistit aktualni pocet procesu, ten je v souboru /proc/loadavg (v tomto pripade je to 162)
cat /proc/loadavg
0.14 0.11 0.05 7/162 2692
A ted otazka zni: jak to udelat co nejefektivneji, na jedinem radku? Zkousel jsem toto:
cut -d' ' -f4 /proc/loadavg|cut -d'/' -f2
162
a toto:
awk 'BEGIN {FS="[ /]"} {print $5}' /proc/loadavg
162
Porad se mi to nezda, existuje neco jednodussiho? Treba za pomoci regularniho vyrazu ...

diky za rady!
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

wolf09 avatar 17.8.2007 10:06 wolf09 | skóre: 30
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
Odpovědět | | Sbalit | Link | Blokovat | Admin
a co jenom

cut -d'/' -f2 /proc/loadavg

Zkusili jste to vypnout a znovu zapnout ?
17.8.2007 10:17 Jirka
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
cut -d'/' -f2 /proc/loadavg
162 2692
To neni presne co jsem chtel.
wolf09 avatar 17.8.2007 10:42 wolf09 | skóre: 30
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
sed -e 's/.*\///' -e 's/ .*//' /proc/loadavg
Zkusili jste to vypnout a znovu zapnout ?
17.8.2007 10:47 Jirka
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
ANO, tusil jsem, ze se tam objevi sed. DIKY!
17.8.2007 10:39 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
Odpovědět | | Sbalit | Link | Blokovat | Admin
Můžu hádat? Ty chceš periodicky hlídat počet procesů a v případě, že se změní, tak ho vypsat:
#!/usr/bin/python
# -*- coding:utf-8 -*-
import time

old = 0
while True:
    line = file('/proc/loadavg').readline()
    n = int(line.split()[3].split('/')[1])
    if old != n:
        print n
        old = n
    time.sleep(0.1)
17.8.2007 10:50 Jirka
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
Prvni cast jsi uhadl presne a dokonce to souvisi i s Pythonem. Zkousim toto: Snadne sledovani systemu
17.8.2007 15:11 Ash | skóre: 53
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba normálně readem:
IFS=" /" read x x x x procs x < /proc/loadavg && echo $procs
nebo
IFS="/" read x procs < /proc/loadavg && echo ${procs% *}
17.8.2007 16:25 Jirka
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
ANO, ANO. Funguje a mozna tu bude jeste mene narocnejsi na zdroje nez sed! Diky!
17.8.2007 16:17 Jirka
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jeste s vratim k puvodnimu dotazu. Udelal jsem si takovyto jednoduchy programek v Pythonu (rex.py):
#!/usr/bin/python
# prvni parametr je regularni vyraz
# druhy parametr je soubor

import sys, re

x = sys.argv[1]
f = open(sys.argv[2],'r')
for r in f:
     m = re.search(x, r)
     if m:
          for g in m.groups():
               print g,
          print
f.close    
Jak je patrne, probira soubor po radcich a vypisuje casti, ktere odpovidaji zadanemu regularnimu vyrazu. Takze vyse zmineny problem resim treba takto:
./rex.py ".+ .+ .+ \d+/(.+) \d+" /proc/loadavg
162
Neexistuje nejaka mala utilitka na takoveto veci?
zoul avatar 17.8.2007 18:33 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
Jako na vyparsování regulárního výrazu ze souboru?

$ time perl -ne 'print "$1\n" if m|/(\d+)|' /proc/loadavg
162

real   0m0.026s
user   0m0.003s
sys    0m0.007s
zoul avatar 17.8.2007 18:45 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: jak z textu vypsat pouze cast
…což jde ještě ogolfnout:

perl -nle 'print $1 if m|/(\d+)|' /proc/loadavg

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.