Szkriptek: Python, Perl, Bash, ...

awk bináris I/O

Azon tűnődöm, hogy jó ugyan az awk, de bináris állományok feldolgozására nem optimális, mégpedig azért, mert ő maga zero terminated stringeket ábrázol. Így az az elképzelésem alakult ki, hogy marad a base64-ben való kommunikáció. Tehát van mondjuk egy függvényem, aminek inputja egy szám 0..255 tartományban - ha úgy tetszik, ez string csak számként értelmeződik -, ebből csinál base64-et - persze az átcsorduló biteket kezeli, a stream végére kell egy másik függvény, amelyik lezárja ezt. Kiírja stdout-ra a base64 kimenetet, a base64 -d felszedi ezt, s előállítja a bináris kimenetet.

C-ben írnám, de nem sok kedvem van feltenni a gépemre az OpenWrt SDK-t, majd mips_24kc processzor architektúrára fordítani. Bár az lenne a szép és egyben gyors megoldás. Meg egyszerű is.

Pythonhoz, Perlhez nem értek. Awk, [[b]a]sh, C jöhet.

adat transzformáció és számolás: ötleteket tanácsokat szeretnék. awk?

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.

[MEGOLDVA] grep a konzolon jó, file-ba átirányítva nem

Adott egy fájl: http://oscomp.hu/depot/Dune 2 - Roland MT-32 Soundtrack.ogg.txt
Kiadom rá a parancsot: grep "silencedetect" "Dune 2 - Roland MT-32 Soundtrack.ogg.txt"
Az eredmény: http://oscomp.hu/depot/grep_in_console.txt Tökéletes. (Screenshot: http://oscomp.hu/depot/grep_in_console.png)
De kiadom rá ezt a parancsot: grep "silencedetect" "Dune 2 - Roland MT-32 Soundtrack.ogg.txt" > grep_redirect.txt
És ez az eredmény: http://oscomp.hu/depot/grep_redirect.txt Olyan sorok vannak benne, amiknek nem kéne ott lennie.

Tudja valaki, hogy miért van ez? (Teljesen mindegy, mit bűvészkedtem vele, cat-tal, vagy többszörös pipe-inggal; konzolban mindig jó, file-ban sose...)
Devuan 2 (alias Debian 9, grep 2.27)

fájl hozzáférés

Van két szkriptem. Az egyiket a felhasználó futtatja és a szkript adatokat ír egy adott fájlba. Ugyanehhez a fájlhoz később a rendszergazdának is hozzá kell férnie, és módosításokat eszközölnie. No de elvesznek a felhasználó jogosultságai. 

Van elegánsabb módszer ennél?

owner=$(stat -c %U "${findfile}"), majd chown $owner:$owner $findfile

Hogyan: másoljuk fájlt megbizhatóan egy windows megosztásra ha éppen nem elérhető a megosztás?

Sziasztok,

adott egy linux host, azon fel van mount-olva egy Windows megosztás (/masolni/win). 

Időnként át kell mozgatni fájlokat a linux host-ról a Windows megosztásra, de előfordul, hogy pillanatnyilag nem elérhető a Windows megosztás:

mv: inter-device move failed: ‘/masolni/tovabb.xlsx’ to ‘/masolni/win/tovabb.xlsx’; unable to remove target: Device or resource busy

Mit javasoltok, hogy üzembiztos legyen a fájl mozgatás?

 

Köszönöm.
 

Python unsupported format character ',' MEGOLDVA

Siasztok,

egy php-s kódomat alakítom át python-ra. Az sql parancsokat előre össze szoktam állítani.

Most így próbáltam:

sql="UPDATE job \
                    set type='%s' , \
                    completed_savetime='%s', \
                    completion_status='%s%, \
                    data_class='%s', \
                    data_set_size='%s', \
                    data_size='%s', \
                    end_time='%s', \
                    estimated_bytes='%s', \
                    file_count='%s', \
                    files_totals='%s', \
                    host='%s', \
                    job_state='%s', \
                    level='%s', \
                    name='%s', \
                    nw_client_name_id='%s', \
                    processed_bytes='%s', \
                    saveset_name='%s', \
                    saveset_time='%s', \
                    ssid='%s', \
                    start_time='%s', \
                    vcenter_hostname='%s', \
                    vm_guest_os='%s', \
                    vm_name='%s', \
                    vm_uuid='%s', \
                    where job_id=%s  and torolve=0" % (\
                    tipus,completed_savetime,completion_status,data_class,
                    data_set_size,data_size,end_time,estimated_bytes,
                    file_count,files_totals,host,job_state,level,name, 
                    nw_client_name_id,processed_bytes,saveset_name,saveset_time, 
                    ssid,start_time,vcenter_hostname,vm_guest_os,vm_name, 
                    vm_uuid, job_id, kornyezet)

Az utolsó sorra ezt írja:    

ValueError: unsupported format character ',' (0x2c) at index 134                

Nem értem, hogy hol a hiba. Több másik lekérdezésem is van, ugyan ilyen tördeléssel.

sed csere

Adott egy file:

2020.01.01
23xx
45y
zzzz

és ez a blokk sokszor, más dátummal.

A dátum sorban a .-t le szeretném cserélni -ra. Tehát pl 2020.01.01 -> 2020-01-01

sed -i "s/^\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1-\2-\3 /" file.txt

Ezzel próbálom, de másik sorokban is vacakol...

Mit böktem el?

text keresése vbscriptel webfelületen

Sziasztok,

 

Vbscriptet szeretnék készíteni, ami megnézi, hogy egy megadott weboldalon található szövegben található-e egy megadott keresendő szöveg.

Találtam rá megoldást, de valamiért nem működik.

https://www.tek-tips.com/viewthread.cfm?qid=1700446

A script lefut, de nem történik semmi hibaüzenet nincs.

Van valakinek ötlete, hogy mi lehet a probléma, vagy esetleg van erre egyszerűbb vbscriptes megoldás?

 

Köszönöm a segítséget. 

vbscript

Sziasztok,

 

VBScriptel kapcsolatban szeretnék segítséget kérni.

Olyan VBScriptet szeretnék csinálni amely megnézi egy adott fájl aktuális méretét és a legutolsó módosításának a dátumát és ezt kiiratnám egy html felületre.

Ha ez megvan akkor kibővíteném úgy, hogy egy adott mappába megnézném, hogy melyik belső mappa a legfrissebb.

 

Mivel kezdő vagyok a témában, eddig működő verziót nem sikerült létrehoznom és a neten sem találtam semmi használható megoldást erre.

Köszönöm a segítséget.

bash: email subject dekódolás?

Kaptam egy egyszerűnek tűnő feladatot. Ck. 200 email -ből (dovecot IMAP) kellene táblázatot csinálni. Az első oszlop a dátum a második a subject (tárgy). Mi sem egyszerűbb gondoltam én, de nem tudok rájönni mi ez a kódolás és hogy tudom dekódolni:

Subject: =?ISO-8859-1?Q?Sz=E9kesfeh=E9rv=E1r?= 2. (Krumpli)

Tárgy valójában: Székesfehérvár 2. (Krumpli)

Próbáltam iconv -al és munpack -sl, base64 -el de semmi nem tudtam kinyerni a "Székesfehérvár 2. (Krumpli)" szöveget.
Próbáltam csak egy részével "Sz=E9kesfeh=E9rv=E1r?= 2. (Krumpli)".

Mit nézek be? Mit lehet ehhez használni?

MEGKERÜLTEM

A roundcube listát kinyomtattam pdf -be, copy egy szöveges fájlba, majd néml harccal beemeltem libreoffice calc -ba. Nem lett tökéletes a karakter készltek miatt (utf8) de elfogadták :)