先頭 n 行と末尾 n 行を出力するワンライナー

先頭 n 行を見たいときには head を使う。末尾 n 行を見たいときには tail を使う。先頭 n 行と末尾 n 行を見たいときがある。head が「後略」で tail が「前略」だとすると、結果の「中略」を見たいときなんかに使う。次のようにしてみた。

[takeyuki@sunya ~]$ cat /usr/share/dict/words | awk -v n=3 'NR<=n{a[NR]=$0}{for(i=n;i>1;i--){z[i]=z[i-1]}z[1]=$0}END{for(i=1;i<=n;i++)print a[i];print "...";for(i=n;i>0;i--)print z[i]}'
1080
10-point
10th
...
Zz
zZt
ZZZ

なぜ欲しかったかというと、anarchy golf - Fibonacci Numbersをやっていて、まんなかあたりはともかく、先頭と末尾があっているか確認したかったから。こんな風に。

[takeyuki@sunya 0019_FibonacciNumber]$ perl -e '$_="1\n1\n";while($z++<44){/(\d*)\n(\d+)\n$/;$_.=($1+$2)."\n"};print;' | awk -v n=3 'NR<=n{a[NR]=$0}{for(i=n;i>1;i--){z[i]=z[i-1]}z[1]=$0}END{for(i=1;i<=n;i++)print a[i];print "...";for(i=n;i>0;i--)print z[i]}'
1
1
2
...
701408733
1134903170
1836311903