Differences between revisions 5 and 8 (spanning 3 versions)
Revision 5 as of 2007-09-21 01:53:10
Size: 1042
Editor: p54884242
Comment:
Revision 8 as of 2007-10-16 13:51:05
Size: 1057
Editor: p54BFE162
Comment: make regex work (10 would match 102 as well). although only sed really makes sense here, using nl is still way less pointless than pr!
Deletions are marked like this. Additions are marked like this.
Line 30: Line 30:
   x=3 y=4;
Line 32: Line 33:
   awk 'NR>=$x{print} NR==$y{exit}' "$file" # Same    awk "NR>=$x{print} NR==$y{exit}" "$file" # Same
Line 35: Line 36:
Using cat(1) (and grep(1) (and cut(1))): Using nl(1) (and grep(1) (and cut(1))):
Line 38: Line 39:
   cat -n file | grep '^ *<number of line>' | cut -f 2    nl -b a file | grep '^ *<number of line>\W' | cut -f 2

Anchor(faq11)

How can I print the n'th line of a file?

The dirty (but not quick) way would be:

    sed -n ${n}p "$file"

but this reads the whole input file, even if you only wanted the third line.

This one avoids that problem:

    sed -n "$n{p;q;}" "$file"

At line $n the command "p" is run, printing it, with a "q" afterwards: quit the program.

Another way, more obvious to some, is to grab the last line from a listing of the first n lines:

   head -n $n $file | tail -n 1 

Another approach, using ["AWK"]:

   awk "NR==$n{print;exit}" file

If you want more than one line, it's pretty easy to adapt any of the previous methods:

   x=3 y=4;
   sed -n "$x,${y}p;${y}q;" "$file"                # Print lines $x to $y; quit after $y.
   head -n $y "$file" | tail -n $(($y - $x + 1))   # Same
   awk "NR>=$x{print} NR==$y{exit}" "$file"        # Same

Using nl(1) (and grep(1) (and cut(1))):

   nl -b a file | grep '^  *<number of line>\W' | cut -f 2

BashFAQ/011 (last edited 2025-04-20 12:55:53 by StephaneChazelas)