• Nem Talált Eredményt

9. Linux Shell parancsok 104

10.3. Adatok rendezése

A sort parancs

A sort utasítás minden sor legels® karaktere szerint m¶ködik. Ha az els® karakterek megegyeznek, akkor a második, harmadik, stb. karaktereket hasonlítja össze. A rende-zés a szokásos ASCII kódok esetén az írásjelek számok nagybet¶k kisbet¶k sorrend szerint történik. Az -r kapcsolóval a rendezési sorrendet teljesen megfordíthatjuk. Az -n kapcsolóval numerikusan rendezhetjük a sorokat. Az állomány sorai néha oszlopokba rendezett adatok mez®it tartalmazzák. A mez®k között valamilyen határoló vagy elvá-lasztó jelnek kell állnia, ez alapesetben a szóköz vagy a tabulátor. Ha a sort parancsot a +Szám kapcsolóval használjuk, a Szám által meghatározott mez®t kihagyva végzi a sorba rendezést. A -Szám hatására a rendezés a Számnál megadott mez®nél ér véget.

A sort parancsnak számos alkalmazási lehet®sége van. Az egyik legfontosabb az adatok mediánjának megkeresése. A medián az az érték, aminél az adatok fele kisebb, fele nagyobb. Páratlan számú adatnál ez éppen a sorba rendezett adatsor középs® eleme, páros számú adatnál pedig a két középs® elem.

Másik lehet®ség az adatok ún. kumulatív gyakoriságeloszlásának meghatározása.

A wc parancs

A bet¶k, szavak, és sorok leszámlálására használjuk a wc (word count) parancsot. Ha tehát a középs® elemet keressük, akkor el®ször számláljuk le az adatokat a wc paranccsal, majd osszuk el a kapott értéket kett®vel.

A uniq parancs

A uniq parancs kisz¶ri az egy állományban található egymás után ismétl®d® sorokat, és csak egyszer írja ki az ismétl®d® sort (célszer¶ lehet ezért az állományt el®ször a sort

utasítással rendezni). A parancsot olyankor használjuk, amikor például egy listában ki akarjuk sz¶rni az ismétléseket. A parancsnak a kapcsolókon kívül két argumentuma le-het, a bemeneti és a kimeneti állomány. Ezek hiányában a standard kimenetre illetve bemenetr®l dolgozik. A parancs alapértelmezésben teljes sorokat hasonlít össze. Lehe-t®ség van arra is, hogy az összehasonlítás során ne vegyen gyelembe megadott mez®ket (a mez® egy olyan karaktersorozat, melyet egy vagy több elválasztókarakter általában szóköz vagy tabulátor választ el egy másik karaktersorozattól).

A -c kapcsoló hatására a sorok elé kiírja az ismétlések számát is. Ha ezt a kapcsolót használjuk egy sorba rendezett adatfájlon, akkor könnyen megkaphatjuk a leggyakoribb elemet (az adatok módusza). Ehhez csupán a gyakoriság szerint kell sorba rendezni az adatokat.

10.4. Példák és feladatok

Feladatok

F10.1. Írassuk ki az echo paranccsal a következ® mondatokat:

1. "$HOME, sweet $HOME"

2. "$HOME, sweet [$HOME értéke ]"

3. 'Azt mondta az öreg tímár: "Ez az ulti nem ulti már."'

F10.2. Listázzuk ki, és számoljuk meg a /usr/lib könyvtárban és az összes alkönyvtá-rában az összes olyan fájlt, amelynek utolsó el®tti bet¶je e.

F10.3. A sort és a uniq parancsok segítségével keressük meg a mellékelt adatfájl módus-zát, azaz a leggyakoribb elemet. Rendezzük gyakoriság szerint sorba az adatokat és ábrázoljuk a gyakoriság-eloszlást gnuplottal. Próbáljuk meg az x tengely cím-kézését az egyes kategóriáknak megfelel®en megváltoztatni (Útmutatás: a gnuplot interaktív használatával kérjünk segítséget a help set xlabel paranccsal).

F10.4. A sort, a uniq és a wc parancsok használatával keressük meg a mellékelt adatfájl mediánját, azaz azt az elemet, aminél az adatok fele kisebb, illetve nagyobb.

F10.5. A mellékelt adatfájlban a Mauna Loa obszervatóriumban 1974 és 1987 között mért CO2 koncentrációk találhatóak havi felbontással (http://itl.nist.gov).

Készítsünk kumulatív gyakoriságeloszlást, azaz az koncentráció függvényében áb-rázoljuk, hogy az adott értéknél hányszor fordul el® kisebb mért érték. Az eloszlást ábrázoljuk gnuplottal, és illesszük be egy LATEX dokumentumba.

F10.6. Számoljuk meg, hány olyan fájl van az /usr könyvtárban ami c vagy v bet¶vel kezd®dik, és o bet¶re végz®dik. Azok az útvonalak, amit nincs jogunk olvasni hibát emelhetnek, gondoskodjunk róla, hogy a hibaüzenet a keres.err állományba kerüljön.

F10.7. Adott egy tömörített naplófájl, ami egy számítógép hálózati forgalmának cso-magjait indulási és érkezési eseményeit tartalmazza. Ismerkedjünk meg a naplófájl szerkezetével. Az els® oszlopban az id®bélyegek olvashatóak. Készítsük el kü-lön a kimen® illetve kükü-lön a bejöv® csomagok között eltelt id®tartamok eloszlását.

Készítsünk ezekr®l gnuplot ábrákat. Határozzuk meg, hány bájt adat érkezett a sportgeza.hu szerverr®l a kliensre.

11. fejezet

Szimulációs feladatok

11.1. Példák és feladatok

Feladatok

F11.1. Piszkos Fred, a kapitány, miután meglehet®sen sok rumot fogyasztott, végtelen bolyongásba kezd: 1/21/2 valószín¶séggel balra vagy jobbra indul az Origó nev¶

vendéglátóipari egységb®l. Minden lépés után megpihen, majd ismét azonos való-szín¶séggel lép egyet jobbra vagy balra. Szimuláljuk a kapitány mozgását gawkkal!

1. Írjunk egy gawk szkriptet, amely T = 10 id®lépés után kiírja a kapitány po-zícióját. (Útmutatás: a programot a BEGIN blokkba írjuk. Véletlen számokat rand() függvénnyel kaphatunk, melyet a srand() függvénnyel inicializálha-tunk.)

2. Módisítsuk az el®z® szkriptet úgy, hogy ne egyszer, hanem N = 10 000-szer írja ki a kapitány pozícióját T = 10 lépés után.

3. Az el®z® szkripttel, valamint a sort és uniq parancsokkal készítsünk gyako-riságeloszlást, és az adatokat mentsük el egy fájl-ba. gnuplottal ábrázoljuk az adatokat és illesszünk az adatokra normális eloszlást:

N(m, σ) = 1

√2πσe

(x−m)2

2 (11.1)

4. Ismételjük meg az el®z® feladatot T = 5,10,20,50,100,200,500,1000 id®lé-pésre, és írjuk be az illesztett paramétereket egy adatfájlba.

5. Ábrázoljuk az illesztett paramétereket a T függvényében. Mit tapasztalunk?

Próbáljunk meg az adatokra hatványfüggvényt illeszteni, és határozzuk meg

6. Írjunk LATEX jegyz®könyvet Piszkos Fred bolyongásáról!

F11.2. Piszkos Fred újra felöntött a garatra az Origó nev¶ kocsmában. Igen ám, de a múlt alkalom óta fejlesztették az ivó környékét. Piszkos Fred az utóbbi id®ben már a síkon bármerre botorkálhat. Készítsük el a szimulátort, amivel a trajektóriáját lehet nyomon követni. Vizsgáljuk meg a következ® kérdéseket, amir®l ábrákkal tarkított jegyz®könyvet készítünk.

1. N lépés után Piszkos Fred elpihen egy arra alkalmas helyen, mondjuk egy árokban. Hol vannak a gödrök, azaz hogyan alakul Piszkos Fred kocsmától számított távolságának eloszlása?

2. Hogyan változikN-nel ez az eloszlás?

3. Bolyongása során Piszkos Fred néha visszatér egy-egy pohárkára, amikor az ivó sugarába kerül. Mekkora ennek a valószín¶sége? Valamint a visszatéré-sek között megtett utak hossza milyen eloszlást követ?

4. Milyen érdekes kérdést tehetünk még fel Piszkos Fred botorkálásával kapcso-latban?

F11.3. Dr. Watson a Balaton-parton üldögél, amikor a víz egy palackot sodor a partra.

A palackban a következ® üzenetet találja:

RGKKTRJLFKVJABXVVNAXALGJASTMLGMTMFEKVKZFKEKVKZFKGRAZGXOTMXVG

RZOGHYGJOVHYVSRFGKVKZNGMGRZFVIIAKVKFEZGRFRAIAKVJFZAZZMVZEKOA EZABVOGHYGJOGHEKAMFZAOLGMGJVSAMAJIVKVXFEKGOGEFZZGHYDETRYVEKA JAXGZJGKFJOVEPGMBVGROVHYVSAJZGOVHYVSEKAOVHYVSFJOGSZFJGEMGEKV KFHGIGZDFXFMFKVMZRYGMXGRRASXGHTMHASAHTMLAMHVSTMLVEKJRYGMXGRE ZLVKZNGMGRZFOVNBSAPAHAEJVDEVETMZGZGEKGOGEKGMGEKFJFBGFTLASJVE VMVZVXVMOFJAKLGRYGITBFOGRTIFRVDEVJGHYJFEMVRYZITKKVVCTMGOLGZA XVLLVVRYTJVOGIGZGJOVHYVSRFOVHYVSIVZEKMGZZTMVKZNGMGRZFIAHYGHY JFECFTGMJGSGBKJGBFJOAKFLVEVKGBGEVRYNVRGOFIVLAKVETZVRGMGRHGBF PGBFHVCFMOGZDEVJZFKGRRYAMDGXGRCGMTMFGJMVZAHVZIVZNVJBGIVHYNTJ VJTMCAMBGZFZZIARFEEAJOFRBGRZOVEJGRZIFXRVJOVNBPGMBVTMVXVRFMFV IGMYGZZOGMYFBGHGREKAVIVLASTOGHYVZVJAKZTBVZLVOFRZIAHYSGHFNGMG RZGEGZVOTHYFEGMXGEKZGZZGVXFEGHSVBFDTJSVEKBVLVRZGIVZVCVHYMVMZ AEPTMZCAMAZZGKMGEKJFFSXVGPGSPTRDEIVLASTDEAJAMVBGFHYCAHTRJGMR FVBBFHGKZVPVSGXGZJFJGMMLFSRF

A jelek szerint a szöveget bet¶helyettesítéses titkosítással kódolták, és magyarul íródott. Segítsünk Watsonnak megfejteni az írást!

A megfejtésr®l készítsünk egy LATEX dokumentumot, mely tartalmazza a megfej-tést, valamint a megfejtéshez írt programot.

(Útmutatás: A gyakorlaton megismert Unix parancsok segítségével a titkosított szöveg bet¶ir®l készítsünk egy gyakoriság eloszlást, és hasonlítsuk össze a11.1. áb-rán látható eloszlással, mely egy tipikus magyar nyelv¶ szövegb®l készült.

A titkosítás visszafejtését kezdjük a leggyakoribb bet¶kkel. A tr paranccsal a megfejtett bet¶k helyére helyettesítsünk kis bet¶ket. Ennek segítségével a részben megfejtett szöveg egyes részeib®l újabb bet¶kre következtethetünk.)

11.1. ábra. Bet¶k gyakoriság eloszlása magyar szövegben.

12. fejezet Megoldások

Ebben a fejezetben összegy¶jtöttük a gyakorló példák megoldásához szükséges legfonto-sabb lépéseket.

12.1. Az 1. fejezet gyakorló feladatainak megoldásai

M1.1. megoldás: A nem annyira billenty¶takarékos megoldás a következ®:

lljllklljjjhhhhhjjlllllllkkkkklljjllkklljllklljjjhhh hjhhhhjjjhhhhhhhhhjjlllllllllllkkkllllklljjjjhhkhhjj

Megjegyezzük, hogy az alábbi rövidebb parancssorozat is végigvezet a labirintuson:

lljllkll3j4hhjj7l5klljjllkklljllkl l3j4hj4h3j9hjj11l3k4lkll4jhhkhhjj

M1.2. megoldás: Egy lehetséges megoldás a következ®képpen kezd®dik:

Mit? Miért?

to Jobbra visszük a kurzort (t) az els® o karakterig.

5l A kurzorral 5 karakterrel jobbra (l) ugrunk.

to Ismét jobbra visszük a kurzort az els® o-ig.

jjjjj Ötször lefelé (j) visszük a kurzort.

To Balra visszük a kurzort (T) az els® o-ig.

... ...

Egy teljes megoldás a következ®:

to5ltojjjjjTojjhh4jhhjhhhjhjjljllll9lt okkkklklll3ktokktoklkto6jhjjjj3jjljljl

M1.3. megoldás: Az alábbi táblázat mutat egy megoldást:

Mit? Miért?

ihétf® Insert módba kapcsolunk és begépeljük az els® napot.

<Enter> Új sort kezdünk.

kedd Begépeljük a második napot.

... ...

vasárnap Begépeljük az utolsó napot.

<Esc> Kilépünk az Insert módból.

3k A kurzort 3 sorral feljebb visszük csütörtök-re.

dd A csütörtök-öt kitöröljük, ami így bekerül egy ideiglenes regiszterbe.

A kurzor a következ® sorra (péntek) ugrik.

3k A kurzort 3 sorral feljebb visszük.

P Az ideiglenes regiszter tartalmát visszamásoljuk hétf® fölé (P).

3j A kurzort 3 sorral lejjebb visszük.

dd A szerdá-t kitöröljük, ami így bekerül egy ideiglenes regiszterbe. A kurzor a következ® sorra (péntek) ugrik.

p Az ideiglenes regiszter tartalmát visszamásoljuk péntek alá (p).

A megoldásmenet kezdeti fázisai az alábbi ábrán láthatók, ahol a segédkeret mu-tatja a kurzor helyét az egyes m¶veletek el®tt és után.

hétf® M1.4. megoldás: Az alábbi táblázat mutat egy megoldást:

Mit? Miért?

yy Bemásoljuk a címet tartalmazó sort egy ideiglenes regiszterbe

p Visszamásoljuk az ideiglenes regiszter tartalmát a szövegbe, a cím alá.

A kurzor automatikusan a bemásolt cím els® nem üres karakterére ug-v rik.Visual módba kapcsolunk.

$ A cím utolsó karakterére ugrunk.

r- A kijelölt karakterek cseréje a - karakterre

Mit? Miért?

"ayw Az a regiszterbe ("a) bemásoljuk az els® szót (dw).

"byw Az b regiszterbe ("b) bemásoljuk a második szót (dw).

... ...

"fyw Az f regiszterbe ("f) bemásoljuk a hatodik szót (dw).

3G A 3. sorra ugrunk.

W A következ® SZÓRA1ugrunk.

"aP Az a regiszter tartalmát ("a) beszúrjuk a kurzor elé (P).

dt, Kitöröljük (d) a karaktereket a vessz®ig jobbra (t,).

W A következ® SZÓRA ugrunk.

"bP Az b regiszter tartalmát ("b) beszúrjuk a kurzor elé (P).

dt, Kitöröljük (d) a karaktereket a vessz®ig jobbra (t,).

... ...

M1.6. megoldás: Az alábbi táblázat egy lehetséges megoldást mutat be:

Mit? Miért?

qa A makró rögzítésének indítása az a regiszterbe.

0 A sor elejére ugrunk.

x A kurzor alatti karaktert kitöröljük, és bemásoljuk az ideiglenes regisz-terbe.

$ A sor végére ugrunk.

p Az ideiglenes regiszterb®l a sor végére másoljuk a karaktert.

q A makró rögzítésének befejezése.

A makrót a @a billenty¶k leütésével indíthatjuk. A makró egymás utáni alkalma-zásával körbeforgathatjuk a sort. Próbáljuk ki!