Der Weg zum Einzeiler

Der Kunde war verzweifelt. Sein Mitarbeiter hat es einfach nicht gepackt, die Daten aus einer Datei in die Datenbank zu bekommen. Der hat allen Ernstes versucht mit einem Editor und "Suchen und Ersetzen" zu einem Ergebnis zu kommen.

Das "Problem":

Mir wurde also eine Datei mit einer Liste von Werten vorgelegt, die wie folgt aussieht:

Es waren rund tausend Zeilen. Die erste Spalte ist hierbei der Wert für Rot, die zweite der Wert für Grün, die dritte für blau. Es sind schlicht Farbangaben wie diese in Computerprogrammen und Webseiten verwendet werden.

Gleichzeitig gibt es eine Datenbank, die etwa so aussieht:
Datenbankauszug.png

(Aufgabe: Import der Daten in die Datenbank.)

Erster Schritt:

Die Datei ist teilweise durch Leerzeichen, aber auc durch Tabulatoren getrennt. Um diese zu einer Datei umzuformen, welche als Trenner nur Leerzeichen enthält, hilft unter Linux das Programm "sed". Der Befehl lautet:

~sed "s/\t/ /g" < datei.txt

Das ersetzt alle Tabulatoren durch Leerzeichen. Danach sehen die Daten so aus:

255 250 250 snow
248 248 255 GhostWhite
...

Zweiter Schritt:

Daraus kann man mit awk einen SQL-String "bauen":

~awk -F " " '{ print "INSERT IGNORE INTO `colortable` (`name`,`r`,`g`,`b`) values (\""$4"\","$1","$2","$3");" }'

Was da herauskommt ist:

INSERT IGNORE INTO `colortable` (`name`,`r`,`g`,`b`) VALUES ("snow",255,250,250);
INSERT IGNORE INTO `colortable` (name,r,g,b) VALUES ("GhostWhite",248,248,255);
...

Dritter Schritt:

Das kann man in die Datenbank einlesen, hier mit mysql:

~ mysql -u Benutzer -p db0815

Letzter Schritt:

Jetzt muss man das nur noch zu einem Einzeiler verknüpfen:

~ sed "s/\t/ /g" < datei.txt | awk -F " " '{ ... }' | mysql -u Benutzer -p db0815

Den habe ich natürlich verkürzt, damit der hier auf eine Zeile passt. Der letzte Schritt war dann, dies alles in ein Skript zu verpacken.

Dauer: Keine 10 Minuten.

Das Schreiben der Rechnung dürfte bei den meisten fast länger dauern. Nicht jedoch bei mir, denn ich mache das mit einem Webformular, einem PHP-Skript und den Rest übernimmt Latex. Heraus kommt ein schickes PDF, dass ich nur noch drucken muss. Gespeichert ist schon alles.