Tanulj tínó, ökör lesz belőled...

Sok helyen kaptam már én is a leszúrást, hogy feleslegesen használok pipe-olást olyan helyeken, ahol nagyon nem kéne.. Bevallom őszíntén akkor ezek a jó indulatú tanácsok annyira nem kaptak nagy prioritást ( "működik így is, nem?" ), de mostanra én is eljutottam oda, hogy azt mondjam: Tényleg nagyon igazuk volt.. Lehet csak kis apróság, de attól még igaz.
Így álljon itt egy kis példa ( szertinem amúgy nagyon is tipikus ), hogy miért is éri meg megtanulni jól használni az általunk ismert toolokat. Mind a 2 parancs teljesen ugyan azt csinálja, csak az első a régi szemléletmód alapján, a 2. pedig az új alapján:

# time lssrc -ls topsvcs |grep diskhb|grep vpath |awk '{print $4}' |sed "s/rvpath/vpath/g"
vpath0


real 0m0.36s
user 0m0.00s
sys 0m0.00s


# time lssrc -ls topsvcs | awk ' /diskhb/ && /vpath/ sub( /rvpath/, "vpath") {print $4}'
vpath0


real 0m0.20s
user 0m0.00s
sys 0m0.00s

Kis felhívás: Ezen blogbejegyzés csupán 2 célt szolgál:
- Megköszönni azon emberek tanácsát, akik felhívták rá a figyelmem, hogy igen is nem szabad megélegedni azzal a tudással amink van, mert bőven van még mit csiszolni rajta sok esetben
- Kis iránymutatás másoknak.. Hátha más hibájából képesek tanulni, ha már én nemtudtam időben :)

Hozzászólások

grep tobb kifejezesre: egrep '(foo|bar)'
awk '{print $4}' helyett: cut -f4 vagy cut -f4 -d " "

--
NetBSD - Simplicity is prerequisite for reliability

egrep jogos, de pont arról szól a post, hogy az ember mennyire tipikusan használ pipe-olást, ha már 1 dolgot tud.

cut-al amúgy nem értek egyet: Amennyiben nem szóköz delimiter már buktad is a dolgot ( mondjuk tab esetén ). Ilyen szempontból az awk mérföldekkel jobb.
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..

Persze a probléma megoldható lett volna sima C-ben is (tekintve, hogy az awk-nak is elég C közeli nyelvezete van), de míg a legtöbb rendszer alaptelepítésében benne van az awk is - mint base shell scripting tool -, addig a gcc, vagy ruby nincs..
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..

A fork itt relative olcso, fork + execve kevesebb, mint 0.1 ms.

Lesz itt task valtas, meg tobb read/write rendszer hivas, ami miatt lassabb.
Ha pipe-olt elemek nagy CPU zabalok tobb magos rendszeren a pipe lehet gyorsabb, ha az osze pipolt dolgok csak egy magon kepsek dolgozni.

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

OFF: Biztos lssrc kell ehhez, cltopinfo valamelyik opcioja nem jo?

Nekem ez tűnt akkor a legegyszerűbbnek (a cél konkrétan a HeartBeat-hez használt vpath kikérése volt.. ) lehet amúgy cltopinfo-val is játszani, de nekem valahogy ez tűnt használhatóbbnak akkor.
Amúgy ma kb ugyan ez volt egy másik topic kapcsán, ahol azon filóztam, hogy a datapath query essmap-al kérjem le egy vpath ESSID-ját (SDD driver van a háttérben), vagy lsattr -El-el.. Elméletileg mind a 2 ugyan olyan jól használható a célra.. De ha van valami olyan érved, ami a cltopinfo mellett szól, akkor örömmel várom.

Szerk: Visszavonom - ezt amit akartam cltopinfo-val nem lehet kikérni, szóval bukó..
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..

A time nalad csak az lssrc-t meri, az awk-t vagy a grepet mar nem. Szoval ami idoket itt kaptal, az hulyeseg. Tessek fajlba tenni ezeket, es ugy megmerni time-mal.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Hát barátom.. Így aztán döntsük el, hogy jobban jártunk e :))))

# cat "/tmp/hrgy_check.sh"
lssrc -ls topsvcs |grep diskhb|grep vpath |awk '{print $4}' |sed "s/rvpath/vpath/g"
# cat "/tmp/hrgy_check2.sh"
lssrc -ls topsvcs | awk ' /diskhb/ && /vpath/ sub( /rvpath/, "vpath") {print $4}'
# time "/tmp/hrgy_check.sh"
vpath79
vpath78

real 0m0.20s
user 0m0.00s
sys 0m0.00s
# time "/tmp/hrgy_check2.sh"
vpath79
vpath78

real 0m0.21s
user 0m0.01s
sys 0m0.01s

____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..