T
tibrandt
Grünschnabel
Hallo an das Forum,
ich brauche Eure Hilfe, der Groschen will bei mir nicht fallen:
Ich habe eine sehr große Datei mit „über“ 100000 Zeilen. Die Daten muss ich Zeilenweise auslesen und in eine DB einlesen.
Meine Lösung, diese Komplett in ein Array zu pumpen, funktioniert, ist aber wegen der Größe der Datei sehr langsam.
Deshalb möchte ich in 1000 Zeilen schritten das einlesen vornehmen:
Programmablauf soll sein, 1000 Zeilen einlesen, diese verarbeiten um denn die nächsten 1000 einzulesen, bis das Ende der Datei erreicht ist.
Mein Lösungsansatz ohne Schritte beginnt hier:
Es ist bestimmt ganz einfach, ich sehe es aber leider nicht.
Nachtrag:
Eine Bash ist eigentlich nicht so optimal für die Bearbeitung solch großer Dateien. Aber mein Programm hätte die ganze Nacht Zeit dafür. Der Lösungsansatz soll nur zeigen, in welche Richtung ich will. Normal lese ich Dateien über eine Funktion ein z.B.
Über
geht das einlesen in das Array schon sehr schnell, aber das verarbeiten nicht.
Danke!
ich brauche Eure Hilfe, der Groschen will bei mir nicht fallen:
Ich habe eine sehr große Datei mit „über“ 100000 Zeilen. Die Daten muss ich Zeilenweise auslesen und in eine DB einlesen.
Meine Lösung, diese Komplett in ein Array zu pumpen, funktioniert, ist aber wegen der Größe der Datei sehr langsam.
Deshalb möchte ich in 1000 Zeilen schritten das einlesen vornehmen:
Programmablauf soll sein, 1000 Zeilen einlesen, diese verarbeiten um denn die nächsten 1000 einzulesen, bis das Ende der Datei erreicht ist.
Mein Lösungsansatz ohne Schritte beginnt hier:
Code:
unset TEMPO
ZEILENNUM=1
for ((p=1; $p<=$(wc -l $import | awk '{print $1}'); p++));do
TEMPO[ZEILENNUM]=$(head -n$p $import | tail -n1)
ZEILENNUM=$(($ZEILENNUM+1))
done
Es ist bestimmt ganz einfach, ich sehe es aber leider nicht.
Nachtrag:
Eine Bash ist eigentlich nicht so optimal für die Bearbeitung solch großer Dateien. Aber mein Programm hätte die ganze Nacht Zeit dafür. Der Lösungsansatz soll nur zeigen, in welche Richtung ich will. Normal lese ich Dateien über eine Funktion ein z.B.
Code:
function transf()
{
ZEILENNUM=1
TRANF=$(cat "$1" | tr "'" ' ')
OLDIFS=$IFS
IFS=$'\n'
for foo in ${TRANF}; do
MEM[ZEILENNUM]=$foo
ZEILENNUM=$(($ZEILENNUM+1))
done
IFS=$OLDIFS
}
Über
Code:
transf "datei.csv"
geht das einlesen in das Array schon sehr schnell, aber das verarbeiten nicht.
Danke!
Zuletzt bearbeitet: