DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(sed.info.gz) tail

Info Catalog (sed.info.gz) head (sed.info.gz) Examples (sed.info.gz) uniq
 
 Printing the Last Lines
 =======================
 
    Printing the last N lines rather than the first is more complex but
 indeed possible.  N is encoded in the second line, before the bang
 character.
 
    This script is similar to the `tac' script in that it keeps the
 final output in the hold space and prints it at the end:
 
      #!/usr/bin/sed -nf
      
      1! {; H; g; }
      1,10 !s/[^\n]*\n//
      $p
      h
 
    Mainly, the scripts keeps a window of 10 lines and slides it by
 adding a line and deleting the oldest (the substitution command on the
 second line works like a `D' command but does not restart the loop).
 
    The "sliding window" technique is a very powerful way to write
 efficient and complex `sed' scripts, because commands like `P' would
 require a lot of work if implemented manually.
 
    To introduce the technique, which is fully demonstrated in the rest
 of this chapter and is based on the `N', `P' and `D' commands, here is
 an implementation of `tail' using a simple "sliding window."
 
    This looks complicated but in fact the working is the same as the
 last script: after we have kicked in the appropriate number of lines,
 however, we stop using the hold space to keep inter-line state, and
 instead use `N' and `D' to slide pattern space by one line:
 
      #!/usr/bin/sed -f
      
      1h
      2,10 {; H; g; }
      $q
      1,9d
      N
      D
 
    Note how the first, second and fourth line are inactive after the
 first ten lines of input.  After that, all the script does is: exiting
 on the last line of input, appending the next input line to pattern
 space, and removing the first line.
 
Info Catalog (sed.info.gz) head (sed.info.gz) Examples (sed.info.gz) uniq
automatically generated byinfo2html