HfWU - Datenexport und -import mit awk

Aus Wikizone
Wechseln zu: Navigation, Suche

Todos Linux Skript:

  1. Sonderzeichen austauschen bzw. escapen (,-> chr(44) ; Zeilenumbruch - > chr(10); "
  2. recode ISO_8859-1..utf-8
  3. 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:

  1. Datenbankstruktur prinzipiell aufbauen.
  2. Generierung von SQL - Abfragen auf die Infosite Datenbank um die Daten zu bekommen
  3. 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
  4. Erstellen der Tabelle (evt. von Hand manipulieren)
  5. awk-Skript zum Auslesen aller uids und generieren eines insert-uid.sql Files
  6. Erstellen der Datensätze (nur die uids, alle anderen Felder sind leer)
  7. awk-Skript zum Updaten der Datensätze mit den restlichen Daten (dazu die uids für den where Clause nutzen) -> update.sql
  8. 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

SCHLAGWORTE PERSONAL

Über SQL alle Schlagworte zum Pool 69 (Personal) + Name

SELECT swp_sw_in_swp.schlagwort_ID, sw_schlagworte.name FROM ( swp_sw_in_swp JOIN sw_schlagworte ON swp_sw_in_swp.schlagwort_ID = sw_schlagworte.schlagwort_ID ) WHERE swp_sw_in_swp.sw_pool_ID = 69

Gefundene Schlagworte in eigene Typo Tabelle (über csv Export - Import)


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