Die umgeschriebene Batch-Datei hast du ja schon längst per PM bekommen. Nun noch das versprochene Auswertungsscript für alle Linux / Unix / Cygwin Nutzer.
Die Batch-Datei hängt ja bei jedem Durchlauf die neuen Zeitstempel an die Datei "zeiten.txt" an. Das Shell-Script "zeit-leser.sh" liest die Datei "zeiten.txt" aus und berechnet aus den Zeitstempeln die Zeit-Differenzen. Diese gibt es formatiert aus. Des weiteren wird bei Zeilen, die mit einer Raute ("#") beginnen, die Raute(n) und darauf folgende Whitespaces entfernt und dann folgende Zeichen ausgegeben. Zu deutsch - wenn man vor dem Start der Batch-Datei in der Datei "zeiten.txt" einen Kommentar (z.B. "# e4400 @ 3GHz") einträgt, wird er anschließend von "zeit-leser.sh" ausgegeben. So zwecks Übersichterhöhung. Dieser Satz kein Verb.
EDIT: Die aktuelle Bench-Batch-Datei befindet sich hier und kann inzwischen selbst die Zeit-Differenzen ausrechnen (auch wenn das manchmal schief geht). Aber Freunde Unixoider Betriebssysteme können diesen aktuellen Zeit-Leser trotzdem weiterverwenden
Also, so sieht der zeit-leser aus:
#!/bin/bash
export LC_NUMERIC="POSIX"
if [ ! -e zeiten.txt ]; then
echo "Fehler: zeiten.txt nicht im aktuellen Verzeichnis gefunden" 1>&2
exit 1
fi
function print_time()
{
#echo -n "'$1' "
FLOAT=$(echo "$1" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
if echo $FLOAT | grep -q '[^0-9.]' || [ "$FLOAT" == "" ]; then
echo "\"$FLOAT\" nicht als Sekunden erkannt"
return;
fi
INT=$(echo $FLOAT | sed 's/\..*//')
if [ "$INT" == "" ]; then INT=0; fi
CENTI=$(echo "($FLOAT-$INT)*100" | bc -l | sed 's/\..*//')
printf '%d:%02d:%02d.%02d %8.2f\n' \
$((INT/3600)) $(((INT/60)%60)) $((INT%60)) $CENTI "$FLOAT";
}
STATE="init"
cat zeiten.txt | tr -d '\r' | sed 's/[[:space:]]*$//' | while read i; do
TIME_FIELD=$(echo "$i" | cut -d ' ' -f 1);
KEYWORD=$(echo "$i" | cut -d ' ' -f 2);
# printf '%-22s %-22s %s\n' "'$TIME_FIELD'" "'$KEYWORD'" "'$i'"
if echo "$i" | grep -q '^#'; then
# Zeile wird als Kommentar behandelt.
echo "$i" | sed 's/^#*[[:space:]]*//'
elif echo "$TIME_FIELD" | grep -q '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9],[0-9][0-9]$'; then
# Variable TIME_FIELD enthaelt eine Zeit im Format HH:MM:SS,CS
T=$(echo $TIME_FIELD | sed 's/\([0-2][0-9]\):\([0-5][0-9]\):\([0-5][0-9]\),\([0-9][0-9]\)/\1*3600+\2*60+\3.\4/' | bc -l)
#printf '%-22s %-22s\n' "'$TIME_FIELD'" "'$T'"
if [ "$KEYWORD" == "Start" ] || [ "$KEYWORD" == "Start." ]; then
LAST_TIME=$T
START_TIME=$T
echo "--- Um $TIME_FIELD Uhr gestarteter Batch-Durchlauf ---"
STATE="START"
elif [ "$KEYWORD" == "Single" ] && [ "$STATE" == "START" ]; then
echo -n "Single-Pass Dauer "
print_time $(echo $T - $LAST_TIME | bc -l)
LAST_TIME=$T
STATE="SINGLE"
elif [ "$KEYWORD" == "First" ] && [ "$STATE" == "SINGLE" ]; then
echo -n "First-Pass Dauer "
print_time $(echo $T - $LAST_TIME | bc -l)
LAST_TIME=$T
STATE="FIRST"
elif [ "$KEYWORD" == "Second" ] && [ "$STATE" == "FIRST" ]; then
echo -n "Second-Pass Dauer "
print_time $(echo $T - $LAST_TIME | bc -l)
echo -n "Insgesamt "
print_time $(echo $T - $START_TIME | bc -l)
STATE="START"
echo ""
else
echo "* Fehler. TIME_FIELD=\"$TIME_FIELD\", KEYWORD=\"$KEYWORD\", STATE=\"$STATE\"" 1>&2
STATE="fail"
fi
elif [ "$TIME_FIELD" != "--------------------" ]; then
echo "* Fehler. \"$TIME_FIELD\" nicht als Zeit erkannt" 1>&2
STATE="fail"
fi
done
(als zeit-leser.sh speichern, mit "chmod u+x zeit-leser.sh" ausführbar machen, die Datei zeiten.txt ins selbe Verzeichnis kopieren und mit ./zeit-leser.sh starten.)
Aus einer Datei zeiten.txt wie dieser (Ergebnisse von meinem Desktop und Notebook zusammenkopiert und kommentiert):
### Athlon64 X2, 2x512k Cache, 2400 MHz
14:58:20,17 Start
15:01:10,68 Single Pass Encoding beendet.
15:02:54,51 First Pass von Multi-Pass Encoding beendet.
15:05:19,70 Second Pass von Multi-Pass Encoding beendet.
--------------------
# p3m, 512k Cache, 866 MHz
14:53:48,10 Start
15:04:22,72 Single Pass Encoding beendet.
15:10:50,80 First Pass von Multi-Pass Encoding beendet.
15:19:50,40 Second Pass von Multi-Pass Encoding beendet.
--------------------
.. wird folgende Ausgabe erzeugt:
Athlon64 X2, 2x512k Cache, 2400 MHz
--- Um 14:58:20,17 Uhr gestarteter Batch-Durchlauf ---
Single-Pass Dauer 0:02:50.51 170.51
First-Pass Dauer 0:01:43.83 103.83
Second-Pass Dauer 0:02:25.19 145.19
Insgesamt 0:06:59.53 419.53
p3m, 512k Cache, 866 MHz
--- Um 14:53:48,10 Uhr gestarteter Batch-Durchlauf ---
Single-Pass Dauer 0:10:34.62 634.62
First-Pass Dauer 0:06:28.08 388.08
Second-Pass Dauer 0:08:59.60 539.60
Insgesamt 0:26:02.30 1562.30
In der zweiten Spalte befinden sich die Zeit-Differenzen im Format HH:MM:SS.CS, in der dritten Spalte nochmal die Zeit in Sekunden, z.B. zur Weiterverarbeitung für Diagramme o.ä.
Falls jetzt jemand denkt, dass der X2 schlecht abschneidet: Das MEncoder-Binary ist ohne Thread-Support kompiliert, so dass nur ein Kern vom X2 verwendet wird. Der X264-Codec könnte aber prinzipiell auch mit mehreren Threads auf mehreren Kernen arbeiten.
EDIT: mit den zeiten meine ich den inhalt der zeiten.txt datei nicht die diffrenzzeiten.
weil mit diffrenzzeiten sagtest du ja geht ja leider nicht...
Das habe ich grade erst gelesen. Sollte prinzipiell gehen, aber kennst du das DOS-Äquivalent zu Unix' "cat" (um eine Datei auszugeben)? Ich kenne es nicht...