12.07.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!