Tee fÃŒr die letzten N Zeilen

22/03/2014 - 16:20 von Michael Schuerig | Report spam
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

outlines000
keep=2

usage() {
echo "$0 [ -l <lines> | --lines <lines> ] [ -k <chunks> | --keep
<chunks> ] <output file>"
}

while (( $# > 1 )); do
case "$1" in
lines="$2"
shift 2
;;
keep="$2"
shift 2
;;
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/


Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@lists.debian.org
mit dem Subject "unsubscribe". Probleme? Mail an listmaster@lists.debian.org (engl)
Archive: https://lists.debian.org/3668868.bWtkN5jk8l@fuchsia
 

Lesen sie die antworten

#1 Peter Funk
22/03/2014 - 16:40 | Warnen spam
Hallo Michael,

Michael Schuerig schrieb am Samstag, den 22.03.2014 um 16:15:
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.



In etwa so vielleicht? :

N
Dein_Programm | tee >(tail --lines $N >Dein_Logfile) \
| Dein_zweites_Programm

...
Falls die Performance jemals ein Problem werden sollte könnte ich die
Funktionalitàt dann in Perl/Python/Ruby/C implementieren.


...

Wenn schon, dann nimm bitte Python.

Das ist leicht zu erlernen und Du tust Dir damit
selbst einen Gefallen, falls Du spàter mal in die
Verlegenheit kommen solltest, Deine eigenen Programme
selbst wieder verstehen zu müssen.

Das ist z.B. mit Perl deutlich schwieriger zu erlernen.
[I guess now I've to put an asbestos suit on ;-)]

Viele Grüße, Peter Funk
Peter Funk, home: ✉Oldenburger Str.86, D-27777 Ganderkesee
mobile:+49-179-640-8878 phone:+49-421-20419-0 <http://www.artcom-gmbh.de/>
office: ArtCom GmbH, ✉Haferwende 2, D-28357 Bremen, Germany


Zum AUSTRAGEN schicken Sie eine Mail an
mit dem Subject "unsubscribe". Probleme? Mail an (engl)
Archive: https://lists.debian.org/

Ähnliche fragen