Simplemente puede:
(head; tail) < file.txt
Y si necesita usar tuberías por alguna razón, haga lo siguiente:
cat file.txt | (head; tail)
Nota:imprimirá líneas duplicadas si el número de líneas en el archivo.txt es menor que las líneas predeterminadas de la cabeza + las líneas predeterminadas de la cola.
Para una transmisión pura (por ejemplo, la salida de un comando), puede usar 'tee' para bifurcar la transmisión y enviar una transmisión a la cabeza y otra a la cola. Esto requiere el uso de la función '>( lista )' de bash (+ /dev/fd/N):
( COMMAND | tee /dev/fd/3 | head ) 3> >( tail )
o usando /dev/fd/N (o /dev/stderr) más subcapas con redirección complicada:
( ( seq 1 100 | tee /dev/fd/2 | head 1>&3 ) 2>&1 | tail ) 3>&1
( ( seq 1 100 | tee /dev/stderr | head 1>&3 ) 2>&1 | tail ) 3>&1
(Ninguno de estos funcionará en csh o tcsh).
Para algo con un poco más de control, puede usar este comando perl:
COMMAND | perl -e 'my $size = 10; my @buf = (); while (<>) { print if $. <= $size; push(@buf, $_); if ( @buf > $size ) { shift(@buf); } } print "------\n"; print @buf;'
ed
es el standard text editor
$ echo -e '1+10,$-10d\n%p' | ed -s file.txt