Forst - písemka 1.7. 2015 - Join

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.
Kalthar
Matfyz(ák|ačka) level I
Příspěvky: 6
Registrován: 5. 10. 2014 10:28
Typ studia: Informatika Mgr.

Forst - písemka 1.7. 2015 - Join

Příspěvek od Kalthar »

Měli jsme napsat Join.

Forst nám zopakoval, jak join funguje. Tedy vezme 2 tabulky (resp. soubory) a podle zadaného pole (impl. 1.), které jsou oddělené oddělovači (impl. tabulátor) sloučit oba soubory na výstup. Přednost má vždy 1. soubor a oba soubory jsou předtřízeny dle zadaného pole.

Ukázkově:

Kód: Vybrat vše

soubor1: 
a 1
w 1
w 2

soubor2:
w 3
w 4

výstup:
w 1 3
w 1 4
w 2 3
w 2 4
Máme několik parametrů.
-t c .... změní oddělovač z tabulátoru na znak c

-1 n .... změní číslo fieldu určeného k porovnávání z 1. souboru na n

-2 n .... změní číslo fieldu určeného k porovnávání z 2. souboru na n

-a [1,2] .... pokud je v prvním souboru porovnávací znak, který není v 2. souboru, pak se tento řádek nevypíše a to platí i obráceně. Tento přepínač toto pravidlo ruší. Pokud máme zadáno -a 1, znamená to, že pokud máme v 1. souboru provnávací znak a, který se v druhém souboru nevyskytuje, vypíšou se na výstup pouze informace z 1. souboru a na místě pro informace z 2. souboru bude pouze prázdné místo. Obdobně pro -a 2. Samozřejmostí je možnost použití -a 1 -a 2.

-o "0,1.2,2.1,1.1 2.2" .... Změní formát výpisu. Uživatel si sám určí v jakém pořadí se mají fieldy vypsat. 0 znamená porovnávací field. 1.2 znamená 2. buňka z 1. souboru. Opět může uživatel využít něco jako -o "0,1.1 1.2" -o "2.1 2.2". Oddělovače mezi informacemi jsou čárky nebo mezery.

Doplňující informace:
1) Žádný ze souborů se nevejde do paměti
2) Máme povoleny rozšíření awk
3) Je zakázáno používat příkaz join
4) Pokud se v průběhu programu u -o odkazuje na field, který na řádku není, bere se jako prázdný, pokud se odkazuje na soubor který není (3. a výš), program zařve.

ukázkový příklad zadání příkazu:

Kód: Vybrat vše

join -t : -o "0,1.1,2.1" -a 1 -a 2 -o "2.2 1.2" -1 2 -2 3
Doporučeno bylo pokud se rozhodneme pro awk využít příkaz getline.
Odpovědět

Zpět na „SWI095 Úvod do UNIXu“