Beadandó feladatok - UNIX

A kiadott feladatok közül legalább kettõnek a megoldását kell beadni.

A beadás szabályai:

A megoldásokat tartalmazó fájlokat levél mellékleteként ("pine" Attchment) küldje el az alul megadott címre. (Semmiképp ne "csa" vagy "maulis" levelezési címére !)
Csak a valerie-ról küldött - beadott feladatokat tartalmazó - leveleket fogadok el !
Az összes Unix beadottat egyszerre, egy levélben küldje el. (Több küldés esetén csak az utolsó levél lesz feldolgozva.)
A levél SUBJECT-je legyen "UNIX-BEADANDO".
(Megfordítva: Az alább megadott címre csak a megoldásokat küldjék. Minden olyan levelet, amire "választ" várnak, "csa@valerie"-nek küldjenek.)

A fájlok neve kezdõdjön a "unix" szóval. Ezt minden feladat esetén a feladat sorszáma kövesse. Ha egy feladat megoldása további fájlokból áll, azok neve kezdõdjön ugyanúgy, mint a megoldás "fõ"-fájljáé, és kapjon valami "extension"-t. Pl. a 3. feladat megoldása a unix3 fájlba kerüljön, s ha további két fájl tartozik a megoldáshoz, akkor ezek neve lehet pl. unix3.adat ill. unix3.sedpar.

Tehát a levél maga soha ne tartalmazza a megoldást ! (Kommentárokat se, a levelet el sem fogom olvasni, tehát lehet teljesen üres ! Ennek megfelelõen, minden, a megoldásra vonatkozó kommentárt a megoldást tartalmazó fájlokba tegyen, mert azoknak megnézem a belsejét is.)

Csak az itt leírtaknak megfelelõ megoldást fogadom el. (Ezt tudom Unix scripttel feldolgozni.)

A feladatokat mindenkinek egyedül kell megoldania, semmiféle "csapatmunka" nem megengedett !
A puskázás gyanúját is kerülje ! (Puskázásból több baja származhat a beadottakkal kapcsolatban, mint akármi másból.)

Próbálja ki (a valerie-n és Linuxon) a beadott feladatot ! Valerie-n és Linuxon is értelmesen kell viselkedni mindegyik megoldásnak. Ez azt is jelentheti, hogy a kettõ közül az egyiken csak azt írja a képernyõre a script, hogy ezen a gépen nem, hanem csak a másikon mûködik.
(Nem mûködõ beadott annyival rosszabb a be se adottnál, hogy az azt kiértékelõt feleslegesen dolgoztatja.)
A tesztadatait nem fontos beküldeni. Ha mégis ezt teszi, akkor se legyen a tesztadatokat tartalmazó fájl neve "beégetve" a scriptbe. (Vagyis: egy "szûrõ" a standard inputról vagy paraméterként adott fájlból dolgozzon, és a standard outputra írjon !)
Annak a lekérdézésére (ha szükséges), hogy a melyik gépen fut egy script, használhatja a "hostname" parancsot.

Az elküldést elõször próbálja ki úgy, hogy saját magának küldi el a levelet és melléklete(i)t !

*-gal jelöltem a (szerintem) nehezebb feladatokat.

Megjegyzés:
Azért is érdemes kettőnél több megoldást beadni, mert így egyrészt akkor is meglesz a kötelező, ha az értékelés valamelyik megoldást rossznak találja, másrészt "féljegyre" megírt ZH eredményének megajánlott gyakjeggyé kerekítését a nagyon szép vagy nagyon sok beadott fölfele irányítja.
A beadás visszaigazolása:

A beadást követõ egy héten belül felkerül a neve és a beadott feladatainak a directory listája egy másik html-lapra. Ha ez nem történik meg, reklamáljon, és küldje újra a megoldásokat.

Néhány tanács:
  • Érdemes elovasni az elõadás anyag végén található További parancsok c. részt, mivel több feladat is várhatóan csak az itt leírt parancsok használatával oldható meg.
  • A valerie-n a "last" parancsot igen óvatosan használják, mert igen lassan és soká futhat teljes outputra. Teszteléshez hozzanak létre vele egyszer egy (max. párezer soros) tesztfájlt, és azon teszteljenek. (Vagy elõször a 7. feladatot oldják meg, és használják fel a megoldását a "last"-tal dolgozó megoldásokban.)

1. feladat.

    Készítsen statisztikát egy konkrét user-nek a valerie-ra, az "aszt..." gépek valamelyikéről történt bejelentkezéseinek számáról hétfői, keddi, ... vasárnapi bontásban. (Ebből egyszerűsített esetben az olvasható le, hogy az illető mikor jár be az egyetemre.)
    A parancsfájlnak értelemszerűen csak a valerie-n kell érdemi munkát végeznie.

2. feladat.

    Készítsünk statisztikát a gépre 2000-ben történt bejelentkezésekről. (Csak valódi user-ek bejelentkezéseit számoljuk!)
    1. Mondjuk meg, hogy melyik 10 napon történt a legtöbb bejelentkezés.
    2. Adjuk meg a hétfői, keddi, ... vasárnapi bejelentkezések számát.
    3. Mondjuk meg, melyik 10 felhasználó jelentkezett be a legtöbbször.
    4. Nem kötelező rész: Adjuk meg a 0-1, 1-2, ... 12-13, ... 23-0 óra között bejelentkezettek számát, a bejelentkezések száma szerint rendezetten.

3. feladat.

    Listázzuk ki a bejelentkezett felhasználókat a bejelentkezés óta eltelt idő szerint csökkenő sorrendben.

    Nehezített változat: Ha a felhasználó többször is bejelentkezett, csak a legrégebbi bejelentkezését vegyük figyelembe.

*4. feladat.

    Listázzuk ki a felhasználókat a bent töltött idő szerint csökkenő sorrendben. (Nem csak a pillanatnyilag bejelentkezetteket.)

    Nehezített változat: Ha a felhasználónak vannak egymást (részben vagy teljesen) átfedő bejelentkezései, akkor ezen bejelentkezések közös időtartamát csak egyszeresen számítsuk.

5. feladat.

    A standard input, vagy a második paraméterként megadott textfile sorait vagdaljuk szét szóközök mentén a lehető leghosszabb, de az első paraméternél nem nagyobb hosszúságú sorokra.

    Nehezítés: Az output fájl minél kevesebb sorból álljon, azaz ne csak hosszú sorok szétvágását, hanem rövidebbek egyesítését is végezze el a parancsfájl.

*6. feladat.

    A feladat ugyanaz, mint az 5. feladat a nehezítéssel együtt, ezen kívül pedig még a következő: A kapott sorokat a helyközök egyenletes elosztásával húzzuk ki a megadott hosszúságúra (ha lehet).

7. feladat.

    Irjon olyan - minél gyorsabban működő - scriptet, ami a standard input, vagy a második paraméterként megadott textfile sorait addig listázza, amíg egy, az első paraméterrel adott szó elő nem fordul a sorban. (Azt a sort, amiben először előfordul a szó, - és az azt követő sorokat - már nem kell listázni.)

8. feladat.

    Irjon olyan parancsfájlt, ami a paraméterben kapott directory (összes) aldirectoryjait az általuk (fájljaik és (al-)aldirectoryjaik által) összesen elfoglalt hely szerinti növekvő sorrendben listázza. A listán szerepeljen minden (al)directory neve előtt az általa elfoglalt hely mérete is. Ha nem kap paramétert a parancsfájl, akkor működjön az aktuális directoryra.

*9. feladat.

    Irjon olyan parancsfájlt, aminek a feladata egy script elkészítése. A scriptnek az 1. paraméterben kapott directory összes, 1,4MB-nál nem nagyobb fájlját össze k>

    Átvitel megszakítva!

    egy-egy tar-file mérete ne legyen nagyobb 1,4MB-nál és lehetőleg minél kevesebb tar-file keletkezzen. A keletkezett tar-file-ok neve legyen xxx.001, xxx.002, ..., ahol "xxx" a parancsfájl 2. paramétere, ha nincs második paraméter, akkor pedig "tar_file".

    Egyszerűség kedvéért feltehetjük, hogy egy tar-file mérete pontosan megegyezik a bele csomagolt fájlok méretének összegével.
    A "minél kevesebb" kritériumnak már az is megfelel, ha a valamilyen sorrendben feldolgozott fájlok közül egy tar-file-ba a következő feldolgozandó fájl már nem férne bele.

    Egyszerű változat: feltesszük, hogy a directoryban csak fájlok vannak, és azok egyenkénti mérete nem nagyobb 1,4MB-nál.

10. feladat.

    Irjon olyan parancsfájlt, ami a paraméterként kapott fájlokat összecsomagolja egyetlen (levélben is elküldhető) ASCII parancsfájlba úgy, hogy a kicsomagolás a parancsfájl elindításával történhessen.
    (A megoldásban nem használhatja az ezt a feladatot elvégző "shar" parancsot !)

    Nehezítés: Ha a kicsomagoláskor megadunk fájlneveket is, akkor csak az adott nevű fájlokat csomagolja ki a parancs.

11. feladat.

    Irjon parancsfájlt, amelyik - a jelentkezes parancsot felhasználva - azokról a felhasználókról gyűjt adatot, akik a "Programozási környezet" tárgyra ebben a félévben bejelentkeztek.

    A parancsfájlnak azokat a user-eket kell listáznia, akiknek van a valerie-n honlapja. A listán szerepeljen az is, hogy összesen hány .jpg vagy .gif stringet tartalmazó sor található az illető "index.html" fájljában.
    A parancsfájlnak értelemszerűen csak a valerie-n kell érdemi munkát végeznie.

    Megjegyzés:
    a valerie-n az "xyz" user honlapja a /public directory azon aldirectoryjának a public_html/index.html nevű fájljában van, amelyik directorynak a neve az "xyz" user $HOME directoryjának a nevével megegyezik (a kezdeti /-től eltekintve).
    (Pl. csa HOME directoryja: /h/teacher/csa, honlapja: /public/h/teacher/csa/public_html/index.html.)

*12. feladat.

    A standard input, vagy a második paraméterként megadott - html-szerű - textfájlt alakítsuk át egy adott nyomtatóra alkalmas formába. A parancsfájl első paramétere a nyomtató neve. A "html-szerű" azt jelenti, hogy pl. "<B>", "</B>", ... helyettesítendő jelsorozatok vannak benne. Más szóval az input fájl "kacsacsőrök" közti részeit - a kacsacsőrökkel együtt - kell valamilyen, az adott nyomtatóra jellemző jelsorozattal helyettesíteni.

    Az átalakításhoz egy olyan háromoszlopos táblázatot használunk, ami a "NYOMTATOK" környezetváltozóban adott nevű fájlban van. A fájl sorainak szerkezete a következő:

    1. Az oszlopokat tabulátorjelek tagolják;
    2. Az oszlopok:
      1. A nyomtató neve
      2. A "<VEZERLOJEL>" alakú rész, amit az inputban helyettesíteni kell
      3. A helyettesítő jelsorozat

    A következőket feltételezhetjük:

    1. A kacsacsőrök belsejében nincs "<" ill. ">" jel.
    2. A kacsacsőrök nem folytatódnak új sorban.
    3. A helyettesítő jelsorozatok nem tartalmaznak "<", ">" jelet ill. tabulátorjeleket.

Csizmazia Albert progkor@valerie.inf.elte.hu