Portál AbcLinuxu, 14. května 2025 02:47
Da se nejakym lepsim zpusobem napsat skript nez je zde napsany , zda se mi to moc divoke , hlavne opakovane volani atd ...
us=`top -n 1 | grep 'Cpu' | awk '{print $2}' | cut -d '%' -f1`
sy=`top -n 1 | grep 'Cpu' | awk '{print $3}' | cut -d '%' -f1`
ni=`top -n 1 | grep 'Cpu' | awk '{print $4}' | cut -d '%' -f1`
id=`top -n 1 | grep 'Cpu' | awk '{print $5}' | cut -d '%' -f1`
wa=`top -n 1 | grep 'Cpu' | awk '{print $6}' | cut -d '%' -f1`
hi=`top -n 1 | grep 'Cpu' | awk '{print $6}' | cut -d '%' -f1`
si=`top -n 1 | grep 'Cpu' | awk '{print $7}' | cut -d '%' -f1`
st=`top -n 1 | grep 'Cpu' | awk '{print $8}' | cut -d '%' -f1`
/usr/bin/rrdtool update databaze.rrd N:$us:$sy:$ni:$id:$wa:$hi:$si:$st
budu vdecny za jakekoliv napady a pripominky
grep
, cut
a awk
umí awk
(způsobů je samozřejmě více, ani nezkoumám Váš postup, pouze jej přepisuji):
top -n 1 | awk '/Cpu/{split($2,us,"%");print(us[1]);}'No a pak samozřejmě to celé mohu napsat v awku, takže si naplním proměnné:
split($2,us,"%"); split($3,sy,"%"); ... split($8,st,"%");A celé to z toho awku u zavolám pomocí
system()
nebo si tam celý ten řádek připravím a výsledek vrátím shellu ke zpracování.
diki moc stacilo jen nakopnout , uz se s tim poperu
promene se mi ulozili a ted printem , to uz nevim jak nebo mam spis malou predstavu jak by to melo vypadat a porad se mi nedari dostat je do promennych
#!/bin/sh
db='/var/www/rrd/cpu'
rrd='/usr/bin/rrdtool'
top -n 1 | awk '//Cpu/{split($2,us,"%")
split($3,sy,"%")
split($4,ni,"%")
split($5,id,"%")
split($6,wa,"%")
split($7,hi,"%")
split($8,si,"%")
split($9,st,"%")
;print "$rrd update $db N:\x27" $1 "\x27:\x27" $2 "\x27:\x27" $3 "\x27:\x27" $4 "\x27:\x27" $5 "\x27:\x27" $6 "\x27:\x27" $8 "\x27\"}'
celkem 8 promennych ktere potrebuju vlozit do programu rrdtool v tomhle formatu $rrdtool update $db N:$us:$sy:$ni:$id:$wa:$hi:$si:$st
vim ze jsem blizko , nebo si to alespon myslim
tak jsem pokrocil bez chyb hlasek
top -n 1 | awk '/Cpu/{split($2,us,"%")
split($3,sy,"%")
split($4,ni,"%")
split($5,id,"%")
split($6,wa,"%")
split($7,hi,"%")
split($8,si,"%")
split($9,st,"%")
;print "/usr/bin/rrdtool update /usr/bin/rrdtool/cpu.rrd N:\x27"$2"\x27:\x27" $3 "\x27:\x27" $4 "\x27:\x27" $5 "\x27:\x27" $6 "\x27:\x27" $7 "\x27:\x27" $8 "\x27:\x27" $9 "\x27"}'
vysledek /usr/bin/rrdtool update /usr/bin/rrdtool/cpu.rrd N:'35.9%us,':'2.7%sy,':'0.0%ni,':'60.4%id,':'0.4%wa,':'0.2%hi,':'0.3%si,':'0.0%st'
kyzeny vysledek ale je /usr/bin/rrdtool update /usr/bin/rrdtool/cpu.rrd N:35.9:2.7:0.0:60.4:0.4:0.2:0.3:0.0
Takhle to dava, co pozadujete:
top -n 1 | awk '/Cpu/{split($2,us,"%")
split($3,sy,"%")
split($4,ni,"%")
split($5,id,"%")
split($6,wa,"%")
split($7,hi,"%")
split($8,si,"%")
split($9,st,"%")
;print "/usr/bin/rrdtool update /usr/bin/rrdtool/cpu.rrd N:"us[1]":"sy[1]":"ni[1]":"id[1]":"wa[1]":"hi[1]":"si[1]":"st[1]}'
AWK nerozumim, ale tyhle odkazy mi pomohly:
www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_06_02.html
www.starlink.rl.ac.uk/star/docs/sc4.htx/node39.html
man awk
, je to tam vše v kostce docela dobře popsané. split()
, vezme řetězec z prvního parametru, rozseká podle oddělovače z třetího parametru (nepovinný, pak se použijé definovaný oddělovač polí) a výsledek utřepe do pole v druhém parametru.
Jinak je to hnidopišina a awk
snese hodně, ale začínat řádek středníkem je celkem nekonvenční.
uz jsem to poresil , stacilo vyhazet \x27
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.