More ways to extract a block of text from a stream and prepend the line number to each line.
Below is the Gawk version. The built-in variables NR is the number of the current line and $0 is the content of the current line.
gawk "(NR >= r1 && NR <= r2) {printf("""%4d %s\n""", NR, $0)}"
The Perl and Ruby scripts are exactly the same. The built-in variable $. holds the number of the current line and $_ holds the text of the current line.
perl|ruby -ne "printf '%4d %s', $., $_ if $. >= r1 && $. <= r2"
The Groovy command line options are similar to the Perl and Ruby version, except that you have to separate -n and -e. The built-in variable count holds the number of the current line and line holds the text of the current line.
groovy -n -e "if (count >= r1 && count <= r2) out.format '%4d %s\n', count, line"
The Python version is verbose due to boilerplate code to iterate through all rows in a file:
python -c "import sys; print ''.join('%4d %s' % (r, l) for r, l in enumerate(sys.stdin) if r >= r1 and r <= r2)"
See Also
PS
2008-07-29: Added Groovy version.
No comments:
Post a Comment