[MEGOLDVA] rsync logjának feldolgozása

Sziasztok,

Egy olyan problémába ütköztem, hogy adott egy többszörös rsync script, ami loggolásra kerül, és szeretném összesíteni az átvitt file-oknak a nagyságát. Azt hittem, hogy ez elég egyszerű lesz, mert egyszerűen greppelem azt a sort ami kiírja minden egyes rsync file átvitelének méretét, és összeadom. Ez ugye egyszerű:
 

cat rsync.log | grep "transferred file" | cut -d" " -f 5 | awk '{ SUM += $1} END { print SUM }'

Viszont a probléma, hogy nem konzekvensen van a mértékegység, hiszen ez lehet K, M és G is hozzáírva, így nem tudja összeadni, vagyis ezek bár sed-el ki lehetne törölni, de ugye a helyiértéket is hozzá kellene igazítani mielőtt összeadom.
Tud valaki erre egy "egyszerű" megoldást?

Hozzászólások

Szerkesztve: 2023. 08. 02., sze – 11:44

Hogy paraméterezed az rsync-et, aminek logolod a tevékenységét? Mert nekem konzekvensen byte-ban írja. 
Inkább az rsync paramétereiben keress megoldást, az lehet a könnyebb út. ;)

"A megoldásra kell koncentrálni nem a problémára."

Nah ma kiderült, hogy ez sajnos nem működő megoldás, ugyanis az rsync a h paraméter nélkül így írja be a számokat:

6,501,224
81,920

Ezt viszont ha awk-al összeadom, akkor ez jön ki: 87 :D Szal kell még bele egy sed "s/,//g" is. Illetőleg a leírtak alapján ezt is lehet awk-al.

Azert a grep es a cut egy sorban az AWK-val :)

Valahogy így:

 echo "transferred files 2 3 4 5 6" | awk '/transferred files/{SUM += $5} END{print "summa ", SUM, "kB\n"}'
summa  4 kB

awk-ban minden {} parancs elé tehetsz egy mintát / jelek közé, ekkor csak a mintára illeszkedő sorokra hajtja végre (grep helyett). A cut-ot ki tudod váltani a $5-tel, ahogy írtad is. A print-be pedig tehetsz szöveget is kombinálva a változókkal.