2010/ Operációs rendszerek awk
Beadási mód Tar file File neve hxxxxxx.tar Pl. h tar A tar egy könyvtárt tartalmaz A könyvtár neve hxxxxxx/ Pl. h123456/ A könyvtárban van elhelyezve a feladat megoldása h awk Ha shell script is tartozik a megoldáshoz, akkor azt is el kell helyezni h sh néven Ha a feladathoz tartozik példa állomány, akkor a könyvtárban azt is el kell helyezni az alábbi néven adat.txt
Beadási mód A file tartalmazzon egy fejlécet a parancsértelmező fejléc után #! /bin/bash #################### # Nev: Karacsony Szilveszter # EHA-kód: VALAMI.SZE # h-azon.: h # Feladat: 1. feladat # Gyak.vez.: Kozma Attila ####################
Beadási mód 0 pont Ha nem a megadott módon lesz beküldve a feladat!!!
Határidő biro.inf.u-szeged.hu Aki még nem regisztrált REGISZTRÁLJON!!! május 1. 23:59:59 A feladatok ki vannak/lesznek osztva a biro szerveren. Nem fog ellenőrizni!!! Többször is fel lehet tölteni (10) Utolsó feltöltés számít Időben kezdjenek hozzá a megoldáshoz!!!
1. feladat Írjon awk szkriptet, ami egy nyomtatóra küldött feladatok napló fájljából összesíti a felhasználók havi nyomtatási oldalszámait. Emellett jelenítse meg, hogy az adott felhasználónak mennyit kell fizetnie a nyomtatásért, ha egy oldal 6 Ft. Végül összesítse a havi forgalmat és írja ki az utolsó sorba a kinyomtatott oldalak számát és a bevételt. A felhasználókat név szerint növekvő sorrendben jelenítse meg. A naplófájl szerkezete (a mezők szóközökkel elválasztva): USER NYOMTATOTT_OLDALAK PELDANYSZAM Egy felhasználó oldalszámai kiszámíthatók a NYOMTATOTT_OLDALAK * PELDANYSZAM képlettel nyomtatási feladatonként.
1. feladat példa INPUT $ cat logfile pityuka 3 1 marcsi 2 1 pityuka 2 2 OUTPUT $./print_log.awk logfile marcsi 2 old Ft pityuka 7 old Ft --- Osszesen: 9 old Ft
2. feladat Írjon awk szkriptet, ami egy cég beléptető kártyás nyilvántartórendszer havi naplófájlját kapja paraméterül, majd feldolgozza az alkalmazottak ki- és belépési adatait. A naplófájl tartalmazza a dolgozók nevét, a munkavégzés kezdetének és végének időpontját. Számolja ki a két időpont között eltelt időt és összesítse a ledolgozott munkaórákat az adott hónapra. Az emberek a ledolgozott munkaórák szerint kapnak fizetést és az egy napra előírt órák mennyisége 8 óra. Ha valaki kevesebbet dolgozik büntetést, ha többet jutalmat kap, ezért ezeket is összesíteni kell további két oszlopban. Végül minden emberre ki kell számolni, hány napot dolgozott a hónapban. A bemenet formátuma (a mezők pontosvesszővel elválasztva): NEV;KEZDES(HH:MM);VEG(HH:MM) A kimenet formátuma (az elválasztó karakter tabulátor): NEVLEDOLGOZOTT(HH:MM)TOBB(HH:MM)KEVESEBB(HH:MM)NAPOK
2. feladat példa INPUT $ cat marcius.txt Béna Béla;05:10;13:15 Dolgozó Emília;06:00;14:00 Kovács Cecília Emese;06:00;15:00 Dolgozó Géza;06:00;12:00 Béna Béla;05:10;13:15 Dolgozó Emília;06:00;14:00 Kovács Cecília Emese;06:00;15:00 OUTPUT $./osszesit.awk marcius.txt Béna Béla16:100:100:002 Dolgozó Elmília16:000:000:002 Kovács Cecília Emese18:002:000:002 Munkás Géza6:000:002:001
3. feladat Írjon awk szkriptet, ami ellenőrzi a megadott fájlban szereplő felhasználói adatokat (felhasználó név, cím, jelszó, felhasználói csoport, HOME könyvtár). Az adatok formája a következő (pontosvessző az elválasztó karakter): USERNEV; ;JELSZO;CSOPORT;HOME_KONYVTA A mezőkre ezek a megszorítások vannak érvényben: Minden sorban pontosan öt mező szerepel (ha ez nem teljesül a többit nem kell vizsgálni) USERNEV és CSOPORT: csak az angol ábécé kis- és nagybetűit, valamint számokat tartalmazhat. Nem kezdődhet számmal ahol az AZONOSITO csak az angol ábécé kis- és nagy betűit, számokat és. (pont) karaktert tartalmazhat, úgy, hogy pontot nem követhet egy újabb pont a HOST-ban csak az angol ábécé kisbetűi és a - szerepelhetnek és egymás után több HOST-ot is meg lehet adni ponttal elválasztva (pl.: stud.u-szeged) DOMAIN legalább kettő, legfeljebb három karakterből (angol ábécé kis betűi) álló azonosító (pl.: hu, com, org, edu, …) JELSZO: angol ábécé kis- és nagybetűi, számok, \, _, / HOME_KONYVTAR: abszolút útvonalat kell megadni A mezők tartalmaznak legalább egy karaktert. Ha egy sor valamelyik szabályt megsérti írja ki a képernyőre a sor számát és a megsértett szabályt szöveggel. Azt is jelezze, ha minden szabály érvényes egy adott sorra.
3. feladat példa INPUT $ cat users.txt h1283; OUTPUT $./validateUsers.awk users.txt 1. sor: rossz a jelszo formatuma (123*122)! 1. sor: rossz a home konyvtar formatuma (home/h123456)! 2. sor: nincs 5 rekord megadva! 3. sor: OK!
4. feladat Írjon szkriptet, ami első paraméterként az ls -l parancs kimenetét várja. A szkriptnek meg kell keresnie a listából a log-fájlokat, majd csökkenő sorrendben ki kell írnia, hogy az adott típusú log-fájlból mennyi van. A log-fájlok alakja: 'vmi.log'. Az ilyen típusú további log- fájlok: 'vmi.log.1', 'vmi.log.2'... A kikötés csak annyi, hogy az eredeti nevet egy pont majd egy számjegy kövesse. Tehát pl. a 'vmi.log.5.gz' is 'vmi.log' típusú log fájl. (Megjegyzés: Ilyen fájlokat nagy eséllyel találsz a /var/log mappában.)
4. feladat példa INPUT összesen 15 drwxr-xr-x 2 root root :40 apparmor drwxr-xr-x 2 root root :39 apt -rw-r syslog adm :17 auth.log -rw-r syslog adm :19 auth.log.1 -rw-r syslog adm :29 auth.log.2.gz -rw-r syslog adm :21 auth.log.3.gz -rw-r syslog adm :55 auth.log.4.gz -rw-r root adm :55 boot -rw-r--r-- 1 root root :56 strap.log -rw-r--r-- 1 root root :56 bootstrap.log -rw-r--r-- 1 root root :56 bootstrap.log.gz -rw-r syslog adm :14 daemon.log -rw-r syslog adm :23 daemon.log.1 -rw-r syslog adm :29 daemon.log.2.gz -rw-r syslog adm :48 daemon.log.3.gz OUTPUT Log fajlok szama: auth.log : 5 daemon.log : 4 bootstrap.log : 1 strap.log : 1
5. feladat Írjon olyan szkriptet, ami egy fájlt vár bemenetként. A szkript soronként olvassa a fájlt, és Ha egy olyan sort talál, amiben számok és összeadás vagy kivonásjelek követik egymást szóközzel elválasztva, akkor végezze el a műveletet, majd írja ki az eredményt. Ha két művelet vagy két szám követi egymást, akkor írjon ki hibát. Feltehetjük, hogy más hiba nem fordulhat elő ezekben a sorokban. Ha # jellel kezdődik a sor, akkor az utána levő részt írja ki. Bármely egyéb karakterrel kezdődő sort ugorja át.
5. feladat példa INPUT #ez egy megjegyzés ezzel a soral nem csinál semmit OUTPUT 2 ez egy megjegyzés 1111 Hiba: ket szam egymas utan! Hiba: ket muvelet egymas utan!
6. feladat Írjon szkriptet, ami egy szöveges állományt vár bemenetként. A szkript keresse meg az címeket, valamint a telefonszámokat. Az cím formája: a telefonszám formája: +00/ ahol a 0 tetszőleges számjegyet jelöl. A szkript keresse meg továbbá azokat az cím – telefonszám párokat, amelyek ugyan abban a sorban vannak, és az címet legfeljebb 20 karakter távolságra követi a telefonszám (ez a 20 karakter nem tartalmazhat további címet, és feltehetjük, hogy egy cím egy sorban legfeljebb egyszer szerepel). A szkript előbb írja ki ezeket a párosokat, majd írja ki a leggyakoribb címeket és telefonszámokat, majd írja ki, hogy hány cím van átlagosan egy sorban, végül, hogy hány telefonszám van átlagosan egy sorban.
6. feladat példa INPUT Lorem ipsum dolor sit amet, consectetur adipiscing elit. +36/ ultrices vel urna. Etiam massa velit, +36/ pretium sit amet vestibulum quis, auctor. Sed vestibulum mi ut lacus scelerisque pretium fringilla feugiat. Curabitur in lacus eu libero accumsan rutrum. Morbi imperd porttitor. +36/ Etiam quis +36/ massa nec quam faucibus +36/ lacus non tincidunt orci consectetur. +34/ Vivamus +36/ eros tortor, adipiscing sit amet eu, Duis ultricies sem nec elit interdum ac facilisis OUTPUT Osszetartozo parosok: : +36/ : +36/ Legtobbszor elofordulo Legtobbszor elofordulo telefonszam: +36/ ek soronkenti gyakorisaga: 1 Telefonszamok soronkenti gyakorisaga: 0.875
7. feladat Írjon awk scriptet, amely jelenléti alkalmak, valamint a zh pontszámok alapján meghatározza, hogy melyik hallgatók bocsáthatóak vizsgára. A script egy fájlt kap, amelyben az adatok szóközökkel vannak elválasztva. Az első oszlopban a hallgató EHA kódja szerepel, amelyek 14 db ’+’ vagy ’-’ jel követ annak megfelelően, hogy a hallgató jelen volt- e az adott órán vagy nem. Ezután a 3 zh pontszáma következik, minden zh-ra maximálisan 10 pont kapható. Ha egy hallgató nem írta meg valamelyik zh-át, akkor az arra kapott pontszám hiányzik (nincs nulla írva helyette), és csak a két legjobb zh számít. Egy hallgató akkor jelentkezhet vizsgára, ha legfeljebb két hiányzása van, valamint a két legjobb zh pontszámának összege elérte a két zh-ra kapható maximális pontszám felét. Ha a hallgató vizsgázhat, a script írja ki a ’vizsgazhat’ szöveget, továbbá a hallgató által szerzett pontot zárójelben, ellenkező esetben a ’nem vizsgazhat’ szöveget.
7. feladat példa $ cat pontszamok.txt NAGRAAT.SZE DEGQABT.SZE PAZRAAT.SZE FOEPACT.SZE BALQAAT.SZE $./vizsgaztato.awk pontszamok.txt NAGRAAT.SZE vizsgazhat(16) DEGQABT.SZE nem vizsgazhat PAZRAAT.SZE nem vizsgazhat FOEPACT.SZE vizsgazhat(14) BALQAAT.SZE vizsgazhat(20)
8. feladat Adott egy fájl, amely hallgatók EHA kódjait és részteljesítéseik pontszámait (összesen hallgatónként 5 db) tárolja úgy, hogy egy hallgató adatai egy sorban vannak, az EHA kóddal kezdődnek és az értékeket egy-egy tabulátor karakter választja el. A fájlban olyan sorok is előfordulhatnak, amelyek nem EHA kóddal (7 ékezet nélküli nagybetű, és a.SZE szöveg) kezdődnek, ezeket kommentként kell értelmezni, azaz a számításoknál nem kell figyelembe venni. Az EHA kóddal kezdődő sorok mindegyikében 5 számérték van. Készítsen olyan awk szkriptet, amely kiírja a képernyőre szóközzel elválasztva azon hallgatók EHA kódját, akik 35-nél több pontot értek el összesen! A szkript írja ki a képernyőre az átlagos elért összpontszámot is.
8. feladat példa $ cat hallgpont.txt Delelotti csoport: XXXXAAT.SZE Delutani csoport: YYYYAAT.SZE ZZZZAAT.SZE $./feladat.awk hallgpont.txt XXXXAAT.SZE ZZZZAAT.SZE Átlag:
9. feladat Adott egy 3 oszlopos fájl, melynek első két oszlopa egy-egy azonosítót tartalmaz, a harmadik oszlop pedig a két egyed közti távolságot Írjon egy awk programot, amelyik ebből az állományból egy távolságmátrixot készít! a adott két egyedhez nem tartalmaz a fájl távolságot, akkor azokra a helyekre N/A kerüljön Vegye figyelembe, hogy ha az A B távolságérték sor szerepel a fájlban, akkor a B A távolságérték sor nem fog, mert a távolság szimmetrikus. Emellett az A A 0 sorok sem szerepelnek a fájlban, ugyanis bármely egyed önmagától vett távolsága 0. A távolságmátrix elkészítése mellett számolja ki az egyedek közti átlagos, maximális és minimális távolságot!
9. feladat példa (input) AN51 AN50 88 AN52 AN AN52 AN AN53 AN50 81 AN53 AN51 93 AN53 AN AN54 AN AN54 AN AN54 AN AN54 AN53 66 …
9. feladat példa (távolságmátrix) AN50 AN51 AN52 AN53 AN54 AN55 AN56 AN57 AN58 AN59 A A A A A A A A A A
10. feladat Írjon egy olyan awk scriptet, amely CSV formátumban tárolt táblázatot képes HTML táblázattá konvertálni. Precízebben, a CSV formátum egy olyan szöveges formátum, amely táblázatok leírását teszi lehetővé. Az állomány minden sora a táblázat egy sorának felel meg. A táblázat celláit a szöveges állomány soraiban vesszők határolják. Ezt a tárolási formát kell HTML táblázattá alakítani. A HTML egy szöveges jelölő nyelv, amelyben a táblázatokat és jelölőelemek közzé írjuk. A táblázat sorait és jelölők közzé tesszük, míg a táblázat egyes celláit és elemek közzé írjuk. A HTML állományok tetszetős megjelenítésére a webböngészők használhatóak.
10. feladat $ cat sample.csv; cat sample.csv | awk -f program.awk > sample.html; cat sample.html 1,2,3 4,5,6 HTML táblázat
11. feladat Adott egy terület, amit térfigyelő kamerákkal őriznek. A kamerák mindig az órák elején (xy:00-kor) kapcsolnak be és utána egész számú órán keresztül maradnak bekapcsolva. Egy adott nap kamera aktivitását tartalmazó log fájl a következőképpen felépülő rekordokból áll: kamera száma:bekapcsolás ideje órában megadva:kikapcsolás ideje órában megadva az órák a [0, 24] intervallumba esnek Írjon olyan awk scriptet, aminek egyetlen paramétere egy fenti típusú logfájl. A script gyűjtse ki időrendi sorrendben a fehér foltokat, azaz azokat az órákat, amikor egyik kamera sem működött és írja ki a standard outputra. Írja ki a fehér foltok összidejét is
11. feladat példa INPUT $cat camera.log 1:09:13 2:12:22 3:01:12 2:08:11 3:07:08 1:00:22 OUTPUT $./terfigyelo camera.log Feher foltok Teljes ido: 2 ora
12. feladat Adott egy tűzfal log fájlja, ami minden sorában felhasználók böngésző előzményeit tartalmazza a következő felépítés szerint: felhasználó neve;meglátogatott weboldal neve;látogatás időpontja Írj olyan awk scriptet, ami kilistázza a standard outputra a 3 leglátogatottabb weboldalt. Az egyes oldalak mellé írd ki azt is, hogy hányszor látogatták meg őket. Ha valamelyik helyen holt verseny alakulna ki, minden azonos helyezésű oldalt írj ki.
12. feladat példa INPUT $cat firewall.log rossz_tanulo;c; :0356 rossz_tanulo; jo_tanulo; jo_tanulo; jo_tanulo; user; rossz_tanulo; kozepes_tanulo; kozepes_tanulo; OUTPUT $./top3 firewall.log
13. feladat Írjon szkriptet, mely paraméterként egy fájlt vár, amely az ls -lR parancs egy lehetséges kimenetét tartalmazza. A szkript kiírja azoknak a fájloknak a nevét, melyek legalább 3 könyvtár mélységben helyezkednek el az aktuális könyvtárhoz képest. A kiírás után a felhasználótól várja az egyik fájl nevét, majd kiírja annak a méretét.
14. feladat Írjon szkriptet mely paraméterként egy fájlt vár. A fájl tartalma országok, tájegységek, kiinduló pontok, cél pontok és távolságok ;-vel elválasztott sorozata. A szkript feladata az útvonalak darabszáma szerint csökkenő sorrendben megadni az országokat, valamint az útvonalak összhossza szerint növekvő sorrendben megadni a tájegységeket.
14. feladat példa INPUT Magyarország; Börzsöny; Nagybörzsöny; Márianosztra; 18 Románia; Kelemen-havasok; Maroshévíz, Pietros, 25 Magyarország; Mátra; Gyöngyös; Mátraszentistván; 23 Magyarország; Börzsöny; Diósjenő; Nagy-hideg-hegy; 12 OUTPUT Országok: Magyarország 3 Románia 1 Tájegységek: Mátra 23 Kelemen-havasok 25 Börzsöny 30