On Wed, 07 Nov 2007 00:19:19 +0000, Steffen Schuler wrote:
> On Wed, 07 Nov 2007 00:12:08 +0000, Steffen Schuler wrote:
>
>> Hi Minh, hello netlanders!
>>
>> On Fri, 02 Nov 2007 10:54:19 -0700, Minh wrote:
>>
>> <snip>
>>> How to get awk prints the last 5 lines of the file and one line before
>>> last 10 lines.
>> <snip>
>>
>> Here an awk script which makes a single pass through the file by using
>> a ring-buffer:
>>
>> { line[0 + n] = $0; n = f(n + 1) }
>> END {
>> print line[n];
>> stop = f(n)
>> for (i = f(n + 6); i != stop; i = f(i + 1))
>> print line[i]
>> }
>> function f(n) {
>> return int(n % 11)
>> }
> <snip>
>
> An even shorter form:
>
> { line[0 + n] = $0; n = (n + 1) % 11 } END {
> print line[n];
> for (i = (n + 6) % 11; i != n; i = (i + 1) % 11)
> print line[i]
> }
<snip>
Another version:
{ line[NR % 11] = $0 }
END {
print line[(stop = NR + 1) % 11]
for (i = NR - 4; i != stop; ++i)
print line[i % 11]
}
Enjoy it,
Steffen "goedel" Schuler


|