splitten csv-Dateien

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
klak
Beiträge: 491
Registriert: 31.01.2003 19:18:45

splitten csv-Dateien

Beitrag von klak » 29.02.2008 18:27:30

Hallo *,

ich muss csv-Dateien aufsplitten:

aus
2554 2008-02-29 18:15 fibu_20080229_170010.csv
2554 2008-02-29 18:15 fibu_20080229_170020.csv
soll werden:
1750 2008-02-29 18:18 fibu_20080229_170010-01.csv
804 2008-02-29 18:18 fibu_20080229_170010-02.csv
1750 2008-02-29 18:18 fibu_20080229_170020-01.csv
804 2008-02-29 18:18 fibu_20080229_170020-02.csv
split ist klar - aber wie biege ich die Namen wieder hin.

Dank und Gruss
klak

EDIT: ps: muss unter Linux und AIX laufen

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: splitten csv-Dateien

Beitrag von roli » 01.03.2008 15:34:03

Hi,
klak hat geschrieben:split ist klar - aber wie biege ich die Namen wieder hin.
wohin willst du sie den biegen?
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
zongo
Beiträge: 117
Registriert: 09.04.2007 23:53:46

Beitrag von zongo » 02.03.2008 10:36:36

Hi!

Könntest Du Du die Logik nach welcher Du splitten und umbauen möchtest, mal ein wenig genauer erläutern? Auf Grund des Beispiels wird das nichtso ganz klar ....

Ganz prinizipiell werfe ich aber schonmal "awk" in die runde.

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 02.03.2008 11:39:43

hallo,

Code: Alles auswählen

split -d -b 1750 --suffix-length=2 <datei> 
vielleicht noch mit einem "for" oder "find" drumrum (wenns viele dateien sind) ...
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

klak
Beiträge: 491
Registriert: 31.01.2003 19:18:45

Beitrag von klak » 05.03.2008 21:19:00

Hallo *,

ich habe bis zu 500 von diesen *.csv Dateien in unterschiedlicher Größe.
Die nachfolgende Verarbeitung (3 Schritte) verarbeitet eine von mir vorgegebene Anzahl an Dateien.
Da momentan einzelne Dateien sehr groß (5 MB) sein können, verursachen Schritt 2 und Schritt 3 Probleme im Zielsystem.
Deshalb will ich alle Dateien in z. B. 1000 Zeilen große Teile zerlegen, wobei der neue Name Rückschlüsse auf den Ursprungsname beinhalten muss.

mein Erguss bisher:

Scripte 1:
#!/bin/sh
#set -x
zeile=20
file1="fibu*.csv"
ext=".csv"
Pref="X_"
file2="${Pref}*-*"
exec1="/home/kkadmin/zzz_work/split-me.sh"
exec2="/home/kkadmin/zzz_work/split-me_rename.sh"
#
find . -maxdepth 1 -name "$file1" -exec $exec1 {} $zeile $ext $Pref \;
#
find . -maxdepth 1 -name "$file2" -exec $exec2 {} $ext $Pref \;
Scripte2:
#!/bin/sh
datei=${1}
zeile=${2}
ext=${3}
pref=${4}
echo
echo "Parameter 1: $datei"
echo "Parameter 2: $zeile"
echo "Parameter 3: $ext"
echo
###
Prefix=$(basename $datei $ext)
Prefix="${pref}${Prefix}-"
split -l $zeile $datei $Prefix
rm $datei
Scipt 3:
#!/bin/sh
datei=${1}
ext=${2}
pref=${3}
###
datei=$(basename $datei)
datein=${datei##"$pref"}
mv $datei $datein$ext
Funktioniert unter Linux, unter AIX aber nicht (wegen maxdepth) und alles in einem Script wäre gut.

Dank und Gruss
klak
EDIT: mit entsprechenden Vorbereitungen geht es natürlich auch ohne maxdepth.

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 05.03.2008 23:39:51

> Funktioniert unter Linux, unter AIX aber nicht (wegen maxdepth)

gnu-findutils installieren ... http://ftp.gnu.org/pub/gnu/findutils/

> und alles in einem Script wäre gut.

ja stimmt ... ;)
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Antworten