Holló!
Felállás: egy programból adatokat tudok kiexportálni csv-be. Egy másik programba szeretném ezt beolvasni, de transzformációra van szükség.
Két problémával szembesültem eddig:
1) az exportált adatok között a dátum mezők formátuma ilyen: 01/06/2020 05:11:33
A másik program más formátumot vár: Timestamp format must be yyyy-mm-dd hh:mm:ss
2) a kiexportált adatok mellett szeretném, ha a második program még néhány számolt értéket is kapna.
Az első pontra olyan ötleteim jöttek, hogy sed-ben megírom a teljes sor nagy részére illeszkedő mintát, aztán a dátum mezők különböző részeit megcímkézve az új sorrendben az új elválasztóval kiírom. Vagy date paranccsal meg tudom etetni a kapott időpontot és ki tudom íratni az elvárt formában. Ez a második tűnik egyszerűbbnek, remélem, a néhány száz sorban soronként kétszer meghívni a date-et nem lesz túl lassú.
A második pontot LibreOffice Calc-ban meg tudtam valósítani, (csv betölt, formulákat megír, ods-be kiment), és ezt ki tudom menteni csv-be ismét, és mentéskor a számolt értékeket írja ki nekem, de nem akarok minden egyes export után kézzel átalakítani mindent (pedig, ugye, ez az első pontra is adna megoldást). Le is tudom programozni, bár a shell script tudásom ehhez már kevés, szóval inkább python lenne.
Mind a számolásra, mind a dátum átalakításra jöhetnek ötletek. Bármi lehet, ami nem terheli le nagyon a laptopomat (azért max. 1000 sor feldolgozása ne tartson már hosszú ideig), illetve nem bánnám, ha elegáns, könnyen áttekinthető, egyszerű megoldás jönne. Feltételezem, hogy amit én pythonban programoznék le, azt awk-val elegánsan és röviden meg lehet oldani, és sed-del is, csak kevésbé olvasmányos formában. Persze biztos egy bash scriptben is ugyanazt az algoritmust le lehet írni, amit én pythonban megvalósítanék.
A formulák így néznek ki:
N10: =N9+M10
P10: =LOOKUP(K10,L:L,N:N) megkeresi a K oszlopban található timestamp-et az L oszlopban (az L oszlop növekvő sorrendben van, de vannak duplikációk). Ha van pontos egyezés, akkor az utolsót veszi, ha nincs pontos egyezés, akkor azt az utolsót, ami még kisebb nála.
Q10: =IF(O10="Yes",M10/P10," ")
Lookup példa
K |
L |
M |
N |
O |
P |
Q |
|
III. 10. 12:35:45 |
|
9 |
|
|
|
|
III. 10. 17:55:21 |
|
123 |
|
|
|
|
III. 10. 17:55:21 |
|
42 |
|
|
|
|
III. 10. 21:47:04 |
|
66.6 |
|
|
|
III. 10. 17:00 |
|
|
|
|
9 |
|
III. 10. 17:55:21 |
|
|
|
|
42 |
|
III. 10. 18:00 |
|
|
|
|
42 |
|
u.i: Szerkesztéskor a tábla jól néz ki, de a végső nézetben nálam elég gáz. Ha nálatok sem egyértelműek az oszlopok, akkor mondom, hogy csak a K, L, N és P oszlopban van adat.