X
xxeon
Grünschnabel
Hallo
Eventuell kann mir jemand bei meinem Problem helfen. Ich habe mich irgendwie total verrannt und komme nicht weiter.
Die folgende Beschreibung dient zum verständniss des Ablaufes.
Verwendet werden : Debian Wheezy , 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
sowie Bash jedoch mysql in der nicht Debian Version 5.6.16 von der Oracle Comunity Version.
Ablauf :
1:
Es werden Textdatei in der die Werte mit | getrennt sind angeliefert. (das funktioniert ja haha)
so sehen die aus: bisher jeweils eine zeile
2:
Die files werden wenn sie älter als 2 minuten sind einmal kopiert (das holt der Backup client dann ab)
sowie einmal verschoben und entpackt (funktioniert auch)
3:
es werden 6 Werte aus den dateien gelesen und in eine MYsql Tabelle geschrieben .
(funktioniert auch bislang)
4:
Die datei nach dem Durchlauf gelöscht (funktioniert auch)
So sieht das script aus :
Seit einigen tagen werden jedoch Dateien eingeliefert die mehr als eine Zeile haben.
Das Script funktioniert jedoch aufgrund des cat nur jeweils mit der ganzen Datei , dh
ich bekomme bei mehr als einer Zeile den Fehler " Data Truncated" aus der Datenbank zurück und es wird nichts geschrieben.
Kann mir Bitte jemand auf die Sprünge helfen bitte ,Ich habe es auch schon mit verschiedenen awk Befehlen versucht, bekomme aber dann den zielt wert , also $3 $13 usw nicht als einzelwert zum schreiben in die Datenbank.
Vielen Dank im voraus
hb
Eventuell kann mir jemand bei meinem Problem helfen. Ich habe mich irgendwie total verrannt und komme nicht weiter.
Die folgende Beschreibung dient zum verständniss des Ablaufes.
Verwendet werden : Debian Wheezy , 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
sowie Bash jedoch mysql in der nicht Debian Version 5.6.16 von der Oracle Comunity Version.
Ablauf :
1:
Es werden Textdatei in der die Werte mit | getrennt sind angeliefert. (das funktioniert ja haha)
so sehen die aus: bisher jeweils eine zeile
Code:
70||232128320213311|C2189C05|2810238512|C2189D0A|eety.at|1|21|A00680040AB22009|255||20140303151418|182|0|8388872|1797263272|vie2flexing1||475316591|0|4368183168550|91|00||||32F250||3541930278021837|2|1024|2|0|32F250||||0|||1|20140303151418|20140303151720|182|13019119744|021B621F7396737374830000|C2189D0A|32F250|50351|570797|20140303151720|2||0||||||dwh_947640_20140303151818.cdr|00001042|11
Die files werden wenn sie älter als 2 minuten sind einmal kopiert (das holt der Backup client dann ab)
sowie einmal verschoben und entpackt (funktioniert auch)
3:
es werden 6 Werte aus den dateien gelesen und in eine MYsql Tabelle geschrieben .
(funktioniert auch bislang)
4:
Die datei nach dem Durchlauf gelöscht (funktioniert auch)
So sieht das script aus :
Code:
#!/bin/sh
# Verschiebt alles CDRS älter als 2min einmal ins Backup verzeichniss
# und einmal ins process verzeichniss packt dort aus
# und liest die 6 werte in die DB ein
# löscht nach einlesen die CDRS
# modified by HB XXeon 13.3.2014
#sdir = quellverzeichniss
#bdir = backupverzeichniss
#pdif = processverzeichniss zum einlesen in datenbank
sdir="/var/www/eetycdr"
bdir="/var/cdr/backup"
pdir="/var/cdr/insert"
find "$sdir" -type f \( -name '*.gz' \) -mmin +2 -exec cp {} "$bdir" \; -exec mv {} "$pdir" \;
cd "$pdir"
gunzip *.gz
IFS="
";
for i in "$pdir"/*.cdr;
do
a=`cat "$i" | awk -F"|" '{print $3}'`;b=`cat "$i" | awk -F"|" '{print $13}'`;c=`cat "$i" | awk -F"|" '{print $14}'`;d=`cat "$i" | awk -F"|" '{print $22}'`;e=`cat "$i" | awk -F"|" '{print $50}'`;f=`cat "$i" | awk -F"|" '{print $51}'`;
mysql -h localhost -u someuser --password=omeowd -D somedb -e "insert into cdrs (sServedImsi,sRecordOpeningTime,sDuration,sServedMsisdn,sUplinkVolume,sDownlinkVolume) VALUES ('$a','$b','$c','$d','$e','$f');"
rm "$i"
done;
Seit einigen tagen werden jedoch Dateien eingeliefert die mehr als eine Zeile haben.
Das Script funktioniert jedoch aufgrund des cat nur jeweils mit der ganzen Datei , dh
ich bekomme bei mehr als einer Zeile den Fehler " Data Truncated" aus der Datenbank zurück und es wird nichts geschrieben.
Kann mir Bitte jemand auf die Sprünge helfen bitte ,Ich habe es auch schon mit verschiedenen awk Befehlen versucht, bekomme aber dann den zielt wert , also $3 $13 usw nicht als einzelwert zum schreiben in die Datenbank.
Vielen Dank im voraus
hb
Zuletzt bearbeitet: