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.
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í:
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.
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).
"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;
uzivatel@stroj:~/unix$ ./reseni.sh 4000 < maly_vstup.csv > maly_vystup.csv
"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).
Transakce na výstupu vypište v původním pořadí. Zůstatek ale počítejte podle data splatnosti.
cat soubor | while read radek; do # V proměnné "$radek" se postupně budou objevovat jednotlivé řádky se souboru soubor done