HfWU - Datenexport und -import mit awk
Aus Wikizone
Version vom 30. Mai 2007, 16:12 Uhr von 193.196.133.70 (Diskussion)
Todos Linux Skript:
- Sonderzeichen austauschen bzw. escapen (,-> chr(44) ; Zeilenumbruch - > chr(10); "
- recode ISO_8859-1..utf-8
- Tabelle mit den Feldern anlegen (tblFields)
Zeilenumbrüche mit reg. Ausdruck rausschmeißen
Problemstellung: Export von Datenstrukturen aus Infosite (z.B. Personallisten) und -import bzw. Konvertierung in vorgegebene Datenstruktur.
Allgemeines Vorgehen:
- Datenbankstruktur prinzipiell aufbauen.
- Generierung von SQL - Abfragen auf die Infosite Datenbank um die Daten zu bekommen
- awk-Skript zum Auslesen der vorhanden Felder (die Felder liegen nicht als DB-Felder vor sondern sind als Daten in der Tabelle aufgeführt) und Generierung eines sql - Files mit den Notwendigen Statements zum erzeugen der DB-Felder
- Erstellen der Tabelle (evt. von Hand manipulieren)
- awk-Skript zum Auslesen aller uids und generieren eines insert-uid.sql Files
- Erstellen der Datensätze (nur die uids, alle anderen Felder sind leer)
- awk-Skript zum Updaten der Datensätze mit den restlichen Daten (dazu die uids für den where Clause nutzen) -> update.sql
- Ausführen dieses Datensatzes
--- Mitschrieb:
awk -F "#" '{print $2}' results.csv | sort | uniq | grep "SP" | awk '{print $1,"VARCHAR(255)",",\\"}' > insert.sql
-F gibt den Feldtrenner # an, Spalte2 aus results.csv ausgeben | sortieren | doppelte raus | nur die mit SP (Felder)
dann noch manuell create table addr_temp ( und am ende ) eingefügt
Komma am Ende der letzten Zeile löschen: sed '$ s/,//' personal.sql > personal1.sql
Komplettes Skript:
rpl -q "'" "" personaldb3.csv
awk -F "$" '{print $2}' personaldb3.csv | sort | uniq | grep "SP" | awk '{print $1,"VARCHAR(255)",","}' > insert.sql
echo "CREATE TABLE personal (" > personal.sql
cat insert.sql >> personal.sql
sed '$ s/,//' personal.sql > personal1.sql
echo ");" >> personal1.sql
Abfrage von allen Personalbildern
SELECT anm_anmeldung.seiten_location, tpl_feld_in_seite.seiten_ID FROM ( anm_anmeldung JOIN tpl_feld_in_seite ON anm_anmeldung.anmeldung_ID = tpl_feld_in_seite.feldurl ) WHERE tpl_feld_in_seite.feldname LIKE 'SP_BILD_D'
Einfügen der Bilder in die Personaltabelle (vorher Spalte image anlegen)
update personaldb4,personalbildtmp set personaldb4.image = personalbildtmp.image where personalbildtmp.uid = personaldb4.uid
alter table addr_temp uid varchar(255);
sort -n -t# +3 results1.csv
rpl "sp_auto_" "" results1.csv
awk -F "#" '{print "insert into addr_tmp uid values "$4}' results1.csv | sort | uniq
awk -F "#" {'print "update addr_temp SET "$2 "=\""$3"\"" " where uid=\""$4 "\" ;"}' results1.csv > update_values.sql