coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: feature request: tail -H


From: Pádraig Brady
Subject: Re: feature request: tail -H
Date: Sat, 21 Nov 2015 04:54:21 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0

On 01/10/15 17:07, Pádraig Brady wrote:
> On 30/09/15 12:45, Stephen Shirley wrote:
>> Hi,
>> Here's the scenario: you're in a directory of updating log files
>> (could be /var/log), and you want to watch all files for specific
>> keywords. For a single file, "tail -F file | grep keyword" is
>> sufficient, but if you want to watch multiple files, "tail -F file1
>> file2 file3 | grep keyword" is much less helpful because you have no
>> way of knowing which log file the matching text is from.
>>
>> My suggestion is to add a -H flag (convention taken from grep -H aka
>> --with-filename) to tail. With -H specified, tail would no longer
>> print out headers before file contents, it would instead prefix the
>> line with the file name. With this, "tail -HF file1 file2 file3 | grep
>> keyword" is useful, because you get the filename included in the
>> matching lines.
>>
>> The workaround i've come up with in the meantime is:
>>
>>   tail -F "$@" | awk '/^$/ {next} /^==>/ {prefix=$2; next} {print
>> prefix ": " $0}'
>>
>> but it's a bit of a hack; there's no way to be sure that a header
>> string is actually a header, and not part of the file contents.
> 
> I like that. It would be similar to the grep option: -H, --with-filename

Upon more careful consideration, I'm 50:50
about adding per line processing to tail.

More robust awk would be:

  tail -Fv "$@" | awk '
    /^==> .* <==$/ {prefix=substr($0,5,length-8); next}
    {print prefix ":" $0}
  ' |
  grep 'blah'

Now whether that's AWKward enough and not general enough
to warrant a new tail option I'm not sure.

Perhaps we could just add the above snippet to the docs?
The big advantage is that it works everywhere already.

cheers,
Pádraig.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]