Domácí úkol ze 4. cvičení -- deadline do 30. 3. 2017 (do začátku cvičení ve 14.00)


Bankovní výpisy

Tentokrát si zkusíme vyrobit něco užitečnějšího. Zpracujeme soubor ve formátu CSV (viz Wikipedie). Jedná se o jednoduchou tabulku, kde sloupce jsou oddělené středníkem a nečíselné Pro jednoduchost předpokládejme, že se středník nevyskytuje v jiném významu, než oddělovač.

Napište skript, který přijme jako jediný parametr počáteční zůstatek na účtu. Následně bude číst ze standardního vstupu níže popsaný soubor a výstup vypíše na standardní výstup.

Formát vstupu

Práci si vyzkoušíme na zcela náhodně vygenerovaném výpisu z účtu. První řádek obsahuje názvy jednotlivých sloupečků, ostatní pak samotná data. Pořadí těchto dalších řádků je náhodné.

Pořadí jednotlivých sloupečků je následující:

  1. Datum splatnosti -- datum ve formátu den.měsíc.rok
  2. Protiúčet -- číslo protiúčtu (náhodně vygenerované, nesnažte se tam posílat peníze :-D)
  3. Popis transkace -- textový popis typu transakce
  4. Popis pro příjemce -- libovolný text (generováno ze slovníku)
  5. Relativní částka -- celé číslo (v Kč), kladné znamená přírůstek na účtu, záporné odchozí platbu

Formát výstupu

Výstupem bude opět soubor ve formátu CSV. Tentokrát však seřazený podle data. Kromě zůstatku bude obsahovat pouze sloupce ze vstupu.

  1. Datum splatnosti
  2. Relativní částka
  3. Zůstatek po provedení transakce -- jediná nově spočtená informace
  4. Popis transkace
  5. Popis pro příjemce

Výpočet zůstatku

Průběžně počítejte výši zůstatku na účtu. Jako parametr skriptu dostanete zůstatek na účtu před provedením první transakce z výpisu. Transakce se provádějí v pořadí podle data splatnosti. Mají-li dvě transakce stejné datum, můžete si pořadí určit libovolně (ale stejně, jako bude pořadí ve výstupu).

Příklad vstupu, výstupu a volání

Vstup:
"Datum splatnosti";"Protiucet";"Popis";"Popis pro prijemce";"Castka";
"3.1.2014";"8291509922/0500";"Platba/vklad ve prospech uctu";"mzda";+23000;
"15.2.2013";;"Nakup u obchodnika bezkontaktni kartou";;-500;
"12.7.2014";"3365930339/4800";"Platba na vrub uctu";"sauna (lepenka)";-1473;
"26.10.2013";;"Nakup u obchodnika";;-1781;
"6.1.2015";"5239381278/0900";"Platba/vklad ve prospech uctu";"mzda";+25250;
"28.10.2015";"4296811750/8600";"Uhrada z jine banky";"zaloha nerost";+900;
Příklad volání:
uzivatel@stroj:~/unix$ ./reseni.sh 4000 < maly_vstup.csv > maly_vystup.csv
Příklad výstupu:
"Datum splatnosti";"Castka";"Zustatek";"Popis";"Popis pro prijemce";
"15.2.2013";-500;3500;"Nakup u obchodnika bezkontaktni kartou";;
"26.10.2013";-1781;1719;"Nakup u obchodnika";;
"3.1.2014";+23000;24719;"Platba/vklad ve prospech uctu";"mzda";
"12.7.2014";-1473;23246;"Platba na vrub uctu";"sauna (lepenka)";
"6.1.2015";+25250;48496;"Platba/vklad ve prospech uctu";"mzda";
"28.10.2015";+900;49396;"Uhrada z jine banky";"zaloha nerost";

Můžete si stáhnout také velký ukázkový vstup a výstup (pro počáteční zůstatek 10000).

Bonus +3 body

Transakce na výstupu vypište v původním pořadí. Zůstatek ale počítejte podle data splatnosti.

Nápověda

cat soubor | while read radek; do
	# V proměnné "$radek" se postupně budou objevovat jednotlivé řádky se souboru soubor
done

Aktualizace zadání