[Shell] stdout duplizieren

Hallo, Geeks,

von der Standard-Ausgabe des (fiktiven) Programms iluab brauche ich nur die erste und die letzte Zeile. Einfachste Loesung:

frank@odin [~] $ iluab | head -n 1; iluab | tail -n 1

Dummerweise steht iluab fuer ’ i rrwitzig l ange u nd a ufwendige B erechnung’. Naechste Idee:

frank@odin [~] $ iluab \> iluab.log; head -n 1 iluab.log; tail -n 1 iluab.log

Okay, sagen wir, auf dem Rechner gibt’s kein schreibbares Medium oder der uninteressante Muell zwischen der ersten und letzten Zeile umfasste … mehrere TB :wink:. Irgendwelche Ideen, das trotzdem zu verwirklichen?

Danke im Vorraus,
Gruss vom Zentrum.

Hallo, Geeks,

von der Standard-Ausgabe des (fiktiven) Programms iluab
brauche ich nur die erste und die letzte Zeile. Einfachste
Loesung:

frank@odin [~] $ iluab | head -n 1; iluab |
tail -n 1

Dummerweise steht iluab fuer
i rrwitzig l ange u nd a ufwendige
B erechnung’. Naechste Idee:

frank@odin [~] $
iluab > iluab.log; head -n 1 iluab.log; tail -n 1
iluab.log

Okay, sagen wir, auf dem Rechner gibt’s kein
schreibbares Medium oder der uninteressante Muell zwischen der
ersten und letzten Zeile umfasste … mehrere TB :wink:.
Irgendwelche Ideen, das trotzdem zu verwirklichen?

Mit fällt nur

| perl -ne 'if (!$f) { print; $f=1; }; $a=$\_; END {print $a;}'

auf Anhieb ein, es gibt zwar „tee“ zum duplizieren der Ausgabe, das nimmt aber leider keine 2. Pipe als Argument. Mit awk kenne ich mich leider nicht auch, das wäre aber wahrscheinlich die ressourcenschonendere Variante.

Alexander

frank@odin [~] $ iluab | head -n 1; iluab | tail -n 1

frank@odin [~] $ iluab > iluab.log; head -n 1 iluab.log; tail -n 1 iluab.log

Mit fällt nur

| perl -ne ‚if (!$f) { print; $f=1; }; $a=$_; END {print $a;}‘

auf Anhieb ein, es gibt zwar „tee“ zum duplizieren der
Ausgabe, das nimmt aber leider keine 2. Pipe als Argument. Mit
awk kenne ich mich leider nicht auch, das wäre aber
wahrscheinlich die ressourcenschonendere Variante.

Alexander

Danke, awk war der entscheidende Tip:

frank@odin [~] $ iluab | awk 'NR==1 { print $0 } END { print $0 }'

Auf Optimierungsvorschlaege hoffend,
Gruss vom Zentrum.

Hi zentrum,

wie waers damit (schneller gehts kaum noch):

iluab | sed -n '1p;$p'

Gruß
bernhard

Hi zentrum,

Hi,

wie waers damit (schneller gehts kaum noch):

iluab | sed -n ‚1p;$p‘

Super! Rockt! Trotzdem wuerde ich manchmal die Standardausgabe wirklich zweimal benoetigen. Sagen wir, ich haette sowas vor, wie die erste Zeile ausgeben und alle Zeilen, die $SUCHSTRING enthalten. Geht das nur, indem ich sie (umstaendlich) in eine Variables stopfe?

OUTPUT='`iluab`'
echo $OUTPUT | head -n 1
echo $OUTPUT | grep "$SUCHSTRING"

Gruß
bernhard

Danke,
Gruss vom Zentrum.