Můžete jednoduše:
(head; tail) < file.txt
A pokud z nějakého důvodu potřebujete použít potrubí, pak takto:
cat file.txt | (head; tail)
Poznámka:vytiskne duplicitní řádky, pokud je počet řádků v souboru.txt menší než výchozí řádky hlavy + výchozí řádky konce.
Pro čistý stream (např. výstup z příkazu) můžete použít „tee“ k rozvětvení streamu a poslat jeden proud do hlavy a jeden do konce. To vyžaduje použití buď funkce '>( seznam )' bash (+ /dev/fd/N):
( COMMAND | tee /dev/fd/3 | head ) 3> >( tail )
nebo pomocí /dev/fd/N (nebo /dev/stderr) plus subshells s komplikovaným přesměrováním:
( ( 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
(Ani jedno z toho nebude fungovat v csh ani tcsh.)
Pro něco s trochu lepším ovládáním můžete použít tento příkaz perlu:
COMMAND | perl -e 'my $size = 10; my @buf = (); while (<>) { print if $. <= $size; push(@buf, $_); if ( @buf > $size ) { shift(@buf); } } print "------\n"; print @buf;'
ed
je standard text editor
$ echo -e '1+10,$-10d\n%p' | ed -s file.txt