In Teil 1 habe ich einige Unix-Tools für einfache Datenauswertungen vorgestellt. Dies möchte ich in diesem Artikel mit zwei Beispielen etwas vertiefen.
Dafür habe ich mir ein paar Testdaten von hier besorgt, und zwar die Datei airtravel.csv.
"Month", "1958", "1959", "1960"
"JAN", 340, 360, 417
"FEB", 318, 342, 391
"MAR", 362, 406, 419
"APR", 348, 396, 461
"MAY", 363, 420, 472
"JUN", 435, 472, 535
"JUL", 491, 548, 622
"AUG", 505, 559, 606
"SEP", 404, 463, 508
"OCT", 359, 407, 461
"NOV", 310, 362, 390
"DEC", 337, 405, 432
Diese Beispieldaten enthalten für drei Jahre die monatliche Anzahl an Flugreisenden.
Beispiel 1: Summe von Spalten bilden
Als erstes möchten wir die Gesamtsumme pro Jahr wissen, also die drei Spalten aufsummieren. Um die Daten leichter zu verarbeiten, entfernen wir die Tabellenüberschrift sowie die erste Spalte mit den Monatsbezeichnungen.
$ tail -12 airtravel.csv | cut -d ',' -f 2,3,4 > data1.csv
$ cat data1.csv
340, 360, 417
318, 342, 391
362, 406, 419
348, 396, 461
363, 420, 472
435, 472, 535
491, 548, 622
505, 559, 606
404, 463, 508
359, 407, 461
310, 362, 390
337, 405, 432
Wir summieren wir das jetzt? Hierfür benutzen wir das Programm bc, welcher ein Taschenrechner ist, der seine Eingabe von stdin lesen kann. Um eine vernünftige Eingabe für bc zu generieren, müssen wir alle Zeilen einer Spalte zu einer einzigen Zeile zusammenfügen, getrennt durch ein Plus für die Rechenoperation. Dies kann mit dem Tool paste erledigt werden, in dem die -s Option angegeben wird und mit -d ein Trennzeichen.
Zunächst einmal extrahieren wir mit cut eine Spalte und übergeben diese an paste. Dies liefert eine einzige Zeile mit unseren Zahlen, getrennt durch ein +, welche wir an bc übergeben können, um unsere Summe zu erhalten:
$ cut -d ',' -f 1 data1.csv | paste -s -d+ - | bc
4572
Beispiel 2: Maximum und Minimum finden
Als nächstes möchten wir rausfinden, in welchem Monat es im Jahr 1959 am meisten und am wenigsten Reisende gab. Hierfür schneiden wir wieder die Spaltenüberschriften weg. Danach sortieren wir die gewünschte Spalte und holen uns das Minimum und Maximum mit den Tools head und tail:
$ tail -12 airtravel.csv | cut -d ',' -f 1,3 | sort -t ',' -k 2 > col2_sorted.csv
$ cat col2_sorted.csv
"FEB", 342
"JAN", 360
"NOV", 362
"APR", 396
"DEC", 405
"MAR", 406
"OCT", 407
"MAY", 420
"SEP", 463
"JUN", 472
"JUL", 548
"AUG", 559
$ printf "min: %s\nmax: %s\n" "`head -1 col2_sorted.csv`" "`tail -1 col2_sorted.csv`"
min: "FEB", 342
max: "AUG", 559
Fazit: Einfache Aufgaben sind unproblematisch. Bei komplexeren Anforderungen könnte man aber schnell an die Grenzen stoßen. Das war aber noch nicht alles. Im nächsten Artikel warten weitere Werkzeuge auf uns.
Kommentare
Mike
03. Dezember 2020 20:11