Schnelles addieren von Textspalten mit awk

Schnelles addieren von Textspalten

Folgendes kleines AWK Script ("summe.awk") addiert Zahlen, die ihm als Parameter übergeben werden.

#! /usr/bin/awk -f
{ total = total + $1 } END { print total }

Hat man zum Beispiel eine Datei "tabelle.csv" mit Zeilen der Form

Text,Text,123
Text,Text,234
Text,Text,345

so liefert der Aufruf von "cut -d, -f3 tabelle.csv | summe.awk" das korrekte Resultat 702 (123 + 234 + 345).

Eine "schönere" Ausgabe erhält man allerdings durch diesen awk Aufruf:

awk ‚{ total = total + $1 } END { printf "%s (/1024=%s, /1024*1024=%s)n", total, total/1024, total/(1024*1024) }‘

Beispiel:

$ du | awk ‚{ total = total + $1 } END { printf "%s (/1024=%s, /1024*1024=%s)n", total, total/1024, total/(1024*1024) }‘
512325 (/1024=500.317, /1024*1024=0.488591)

Ist in so fern "schöner", da hierbei auch noch direkt die Angaben in "KiBi" (Kilo Binary, dh. dividiert durch 1024) und "MeBi" (Mega Binary, also geteilt durch 1024²) ausgegeben werden.

Bei GROSSEN Zahlen lässt sich das Ergebnis allerdigns nicht mehr so dolle lesen – darum zum krönenden Abschluss dies:

awk ‚{ total = total + $7 } END { printf "%’"’"’d (/1024=%’"’"’f, /1024*1024=%’"’"’f)n", total, total/1024, total/(1024*1024) }‘

Man beachte die "tolle" Anzahl von ‚ und " beim %d und %f😉 Ergebnis ist, das tausender Trennezeichen verwendet werden. Hierbei wurde die 7. Spalte ($7) gezählt; "find … -ls" schreibt da die Dateigrösse.

Beispiel:

$ find ~/Music -iname "*.mp3" -ls |

awk ‚{ total = total + $7 } END {
printf "%’"’"’d (/1024=%’"’"’f, /1024*1024=%’"’"’f)n",
total, total/1024, total/(1024*1024)
}‘

7.419.917.094 (/1024=7.246.012,787109, /1024*1024=7.076,184362)

Nicht jedes awk unterstützt ein solches printf mit ‚. GNU awk unterstützt das aber.

Das Ergebnis ist abhängig von der locale. Bei LC_NUMERIC=C würde es keine Trennezeichen geben.
Bei LC_NUMERIC=de_CH gibt’s hingegen →’← als Trennzeichen:

7’419’917’094 (/1024=7’246’012.787109, /1024*1024=7’076.184362)

Unix/Linux Shell #FTW!🙂

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s