Předtermín 20.5.

Seznámení se základními principy operačního systému UNIX, převážně z uživatelského hlediska. Absolvent kurzu by měl být schopen napsat netriviální program v shellu.
vidlak
Matfyz(ák|ačka) level I
Příspěvky: 20
Registrován: 10. 1. 2008 23:19
Typ studia: Informatika Bc.

Předtermín 20.5.

Příspěvek od vidlak »

Dnešní zadání: Join
- vstupní soubory spojí podle zadaného sloupce
- nesmí se použít příkaz join (překvapivě :) )
- volitelné parametry:
-t c -> znak c bude oddělovač sloupců (na vstupu i výstupu), defaultní hodnota tabulátor
-1 f -> f číslo sloupce v prvním souboru, podle kterého se třídí, defaultní hodnota 1
-2 f -> to samé pro druhý soubor
-o format -> formát výstupu ve tvaru "0,1.1,1.2,2.2,....", kde 0 je sloupec, podle kterého se joinuje 1.n je n-tý sloupec z prvního souboru, 2.n n-tý sloupec 2. souboru, defaultní hodnota "0,1.1,..,1.k-1,1.k+1,..,1.n,2.1,..,1.l-1,1.l+1,..,2.m", (nejdřív sloupec podle kterého se joinuje, pak všechno ostatní z prvního souboru a za to všechno ostatní z druhého souboru)
-a 1 -> ve výstupu budou i řádky prvního souboru, které se nejoinují s žádným řádkem druhého souboru, řádek se vypíše ve stejném formátu jako ostatní, na místa 2.n se dosadí prázdný řetězec
-a 2 -> to samé pro druhý soubor
- poslední dva parametry jsou jména souborů
- výsledek nemusí být nijak seřazen

Celkem nás přišlo 7, jeden musel odejít, protože neměl zápočet. Jenom jeden člověk to nedal (po ústní), ostatní dostali za 1 (3 rovnou, 2 na ústní). Já byl jeden z těch šťastnějších :D
vlastagf

Re: Předtermín 20.5.

Příspěvek od vlastagf »

muzu se zeptat, jak jste resili to prehazeni tech sloupcu?
vidlak
Matfyz(ák|ačka) level I
Příspěvky: 20
Registrován: 10. 1. 2008 23:19
Typ studia: Informatika Bc.

Re: Předtermín 20.5.

Příspěvek od vidlak »

Nevim jak ostatní, ale ja sem si ty dva vstupní soubory rozházel do souborů 1.1.$$,1.2.$$,... pomocí cut -d "$c" -f $i > 1.$i.$$ ve for cyklu podle počtu sloupců v souboru, kde $c je oddělovač polí ze vstupu. Za $$ shell dosadí PID procesu, takže i když skript pustim dvakrát najednou, nedostanou se soubory do kolize.

Pak formátovací řetězec ze vstupu přeformátuješ tak, že místo čárek dáš mezery (tr) a za jednotlivý identifikátory polí (např. 1.1) pomocí sedu přihodíš koncovku ".$$" (přeformátuje se to na seznam souborů s jednotlivýma sloupečkama). Musíš si ale hlídat jaký dáš do sedu uvozovky a kam dát backslash aby ti tam nakonec nezůstaly znaky $$ (tam sem měl nepřesnosti a Forst mě to nechal opravit...a byl se mnou hooodně trpělivej :lol: ).

Ještě buď zkopíruješ soubor 1.n.$$ na 0.$$ (kde n je číslo z parametru -1 n) nebo samotnou 0 nahradíš za 1.n.$$.

Pak už jen zavoláš paste -t "$c" $o, kde $o je právě ten změněný formátovací řetězec (tím -t si nejsem jistej, prostě to má bejt oddělovač polí).

Snad je to alespoň trochu čitelný :D

Rada na konec: hlavně bacha na uvozovky a backslashe, kolem proměnných kde je možnost špatnýho znaku (jméno souboru ze vstupu, oddělovač...) dávat vždycky uvozovky!!!!
Odpovědět

Zpět na „SWI095 Úvod do UNIXu“