[bash] Programmierunterstützung zur Evaluation eines Programms

n006

Cadet 3rd Year
Registriert
Feb. 2009
Beiträge
63
Hi Leute,
ich bin bash Neuling und bräuchte ein wenig Hilfe bei der Erstellung eines Evaluationsskriptes.

Hintergrund
Ich habe ein Programm geschrieben, welches einen Datensatz anlernet und ein Weiters, welches die Ergebnisse testet. Jetzt möchte ich mit einem Bash Skript die Güte ermitteln. Dazu habe ich in etwa 30 Datensätze (CSV Files) welche im Schnitt in etwa aus 8000 Zeilen bestehen (eine Zeile ist eine Instanz).

Ablauf
Nun würde ich gerne für jede der 30 Dateien folgendes tun:
  • Datei aufteilen in "datei100.data" (die ersten 100 Zeilen) und "datei100.test" (Rest).
    • (Nun würden diese in einen Unterordner verschoben und meine beiden Programme ausgeführt.)
  • Datei aufteilen in "datei200.data" (die ersten 200 Zeilen) und "datei200.test" (Rest).
    • (Nun würden diese in einen Unterordner verschoben ...)
  • Datei aufteilen in "datei300.data" (die ersten 300 Zeilen) und "datei300.test" (Rest).

  • ... (solange bis "dateix00.test" <= 100 Zeilen ist)

Frage
Wie hole ich mir also sukzessive die Dateien aus einem Unterordner, spalte diese jeweils in hunderter Schritten und verschiebe diese wieder in andere Unterordner? (Mir geht es hier hauptsächlich um die konkrete Implementierung des Ganzen)

Ich wäre für Tipps sehr dankbar.

Vielen Dank im Voraus!
n006
 
Eine konkrete Implementierung hab ich dir nicht, aber ich würde das (wenn möglich) mit Python machen, da das imo wesentlich komfortabler als ein Bash-Script ist.
 
Ja das hatte ich auch zuerst überlegt, aber da hab ich leider noch weniger Ahnung! Wenn du da aber etwas parat hättest, wäre ich auch dafür dankbar. Man könnte das auch gemeinsam erarbeiten...
 
mit head -n100 <file> und tail +100 <file>
stdout jeweils in die entsprechende datei umleiten.
 
Falls es jemanden interessiert, hab die Lösung selbst rausgefunden:

Code:
#!/bin/bash

# iterate through all datasets
for file in data/*.data
do
 NAME=$(basename ${file%.*})
 echo "name: $NAME"

 DATA="data/$NAME.data"
 NAMES="data/$NAME.names"
 echo "data: $DATA names: $NAMES"


 LINES=`wc -l < $DATA`

 mkdir "files/$NAME"

 for (( c=100; c<=$LINES; c+=100 ))
  do
   head -n $c $DATA > "files/$NAME/$NAME-$c.data"
   tail -n $(($LINES-$c)) $DATA > "files/$NAME/$NAME-$c.test"
   cat $NAMES > "files/$NAME/$NAME-$c.names"
   # run programm 1
   # run programm 2
 done
 echo "Data: $DATA Names: $NAMES Lines: $LINES"
done

Aber Danke trotzdem,
Peace,
n006
 
Zurück
Oben