Tee für die letzten N Zeilen
Ich möchte in einer Pipe die Ausgabe der vorhergehenden Stufe in eine
Datei schreiben, wobei ich aber immer nur die jeweils letzten N Zeilen
behalten will.
Den ersten Teil kann tee natürlich. Für den zweiten habe ich kein
Werkzeug gefunden. Ich habe mir ein Skript gebastelt (s.u.), das die
gewünschte Funktionalität durch rotierte Ausgabedateien angenähert
erreicht. Allerdings ist es sprachbedingt(?) langsam, ein Rohr mit viel
und schnellem Durchfluss würde dadurch möglicherweise gebremst.
Falls die Performance jemals ein Problem werden sollte könnte ich die
Funktionalität dann in Perl/Python/Ruby/C implementieren. Aber
vielleicht gibt es das ja schon.
Michael
#! /bin/bash -e
out=
lines=10000
keep=2
usage() {
echo "$0 [ -l <lines> | --lines <lines> ] [ -k <chunks> | --keep
<chunks> ] <output file>"
}
while (( $# > 1 )); do
case "$1" in
--lines|-l)
lines="$2"
shift 2
;;
--keep|-k)
keep="$2"
shift 2
;;
--help|-h)
usage
exit 0
;;
*)
usage
exit 1
;;
esac
done
out="$1"
if [[ -z $out ]] || [[ -z $lines ]] || [[ -z $keep ]]; then
usage
exit 1
fi
exec 4> "$out"
i=0
while read l; do
(( i += 1 ))
echo "$l" >&4
echo "$l"
if (( $i >= $n )); then
savelog -q -c "$k" -l "$out"
i=0
fi
done
exec 4>&-
exit 0
--
Michael Schuerig
mailto:michael@schuerig.de
http://www.schuerig.de/michael/
Reply to: