Inventur

Zum Jahresende ruft der Chef nach Zusammenfassungen. Meine Aufgabe ist es, Tabellen zusammenzuführen, die als Textdateien vorliegen. Alle Dateien haben einen Namen, anhand dessen sie kategorisiert werden können, und sie liegen alle in einem Verzeichnis.

Die Dateinamen folgen gewissen Mustern. Für dieses Beispiel reicht es aus, zwei unterschiedliche Kategorien zu betachten, weitere lassen sich mit Fleissarbeit hinzufügen.

Das erste Muster ist

bla_[yyyymmdd]_src_[x].txt

Das zweite Muster ist

bla_[yyyymmdd]_src_[x]_xtra.txt

[yyyymmdd] steht für eine 8-stellige Datumsangabe, [x] steht für einen einzelnen beliebigen Buchstaben, die restlichen Zeichen sind buchstäblich zu nehmen.

An jedem Tag werden etliche neue solcher Dateien erzeugt, also sollte das Verfahren möglichst unkompliziert angepasst werden können. Oder noch besser: es funktioniert ganz ohne Anpassungen.

Das gewünschte Ergebnis sind Dateien, die jeweils alle Zeilen von den Dateien enthalten, die dasselbe Datum im Dateinamen enthalten. Die Dateien mit “xtra” im Namen sollen getrennt von den andern zusammengefasst werden.

Diese Aufgabe kann mit einem kleinen Bash-Script erledigt werden, das den Shell-Befehl cat benutzt und in Zusammenhang mit dem find-Befehl aufgerufen wird. Wesentlicher Schlüssel zum Verständnis des Bash-Scripts ist, dass die Dateinamen Mustern folgen und dass diese Muster ähnlich sind: Das Datum wird der erste Teil eines neuen Dateinamens, der letzte Teil ist alles nach dem [x].
#!/bin/bash
# Aufruf ./mkcat.sh $(find -name "bla*")
for i in $*; do
datum=${i:6:8};
suffix=${i:20};
cat $i >> "$datum$suffix";
done;

Die Zahlen 6 und 20 sind erklärungsbedürftig. Sie kommen zustande, weil das find-Kommando dem gefundenen Dateinamen zwei Zeichen voran stellt. Die 8 ist die Länge der neuen Zeichenkette – klar, weil das Datum 8-stellig ist.

Die Grösse des Aufrisses, den jemand macht, um diese Aufgabe zu erledigen, ist umgekehrt proportional zu Wissen. Suche immer nach dem Weg, der die wenigste Schreibarbeit verursacht. Ceterum censeo, dass nur ein fauler Programmierer ein guter Programmierer ist.

Ob es vernünftig ist, die Daten in dieser Form vorzuhalten, lasse ich offen.

Dieser Beitrag wurde unter Allgemein abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.