jegyzet gyomlált változata - Eötvös Loránd Tudományegyetem
jegyzet gyomlált változata - Eötvös Loránd Tudományegyetem
jegyzet gyomlált változata - Eötvös Loránd Tudományegyetem
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Figyeljük meg, hogy vimben a + és ? karaktereknek akkor van speciális jelentésük, ha<br />
egy \ jelet teszünk eléjük.<br />
5.2. megoldása: vimben a következő paranccsal cserélhetjük ki a vesszőket tizedespontokra:<br />
:%s/,/./g<br />
Ha arra is figyelni szeretnénk, hogy a vessző csak akkor szerepel tizedesvesszőként,<br />
ha előtte és utána is szám áll, akkor a cserét következő paranccsal végezhetjük el:<br />
:%s/\([0-9]\),\([0-9]\)/\1.\2/g<br />
Ezután hozzuk létre vimmel az M5.2.awk nevű fájlt, majd írjuk be a megoldást:<br />
# Eloször a prefixeket vesszük figyelembe:<br />
/k[smg]/ {$1 *= 1000}<br />
/m[smg]/ {$1 /= 1000}<br />
/n[smg]/ {$1 /= 1000000000}<br />
# Ezután összeadogatjuk a különbözo mennyiségeket:<br />
/[0-9]+,?[0-9]* [knm]?m/ {l += $1}<br />
/[0-9]+,?[0-9]* [knm]?s/ {t += $1}<br />
/[0-9]+,?[0-9]* [knm]?g/ {m += $1}<br />
# A végén kiiratjuk az eredményt a terminálra:<br />
END{print l, t, m}<br />
Lépjünk ki a vimből, és futtassuk le az alábbi parancsot:<br />
user@host:~$ gawk -f M5.2.awk Gy5.2<br />
ahol M5.2.awk a fenti parancsokat tartalmazó szkriptfájl, Gy5.2 pedig az adatokat tartalmazó<br />
fájl neve. A parancsfájl egyes részeinek jelentése a következő:<br />
Mit? Miért?<br />
/k[smg]/ Azt a sort keressük, amelyben van k, és ezt követi s,<br />
m, vagy g,<br />
{$1 *= 1000} majd erre a mintára illeszkedő sorokra az első oszlop<br />
értékeit megszorozzuk 1000-rel. Hasonló módon<br />
kezeljük a milli- és nano- prefixeket is.<br />
/[0-9]+,?[0-9]* [knm]?m/ Ezután a azokra a sorokra, amelyekre a mértékegység<br />
m,<br />
{l += $1} az l változó értékéhez hozzáadjuk az első oszlopnak<br />
az előtaggal korábbiakban átskálázott értékét. Ezt<br />
megismételjük az idő és tömeg adatokra is.<br />
END{print l, t, m} Végül kiiratjuk az összegzett adatokat.<br />
136