Differences between revisions 7 and 8
Revision 7 as of 2007-10-12 04:24:58
Size: 1056
Editor: 216-12-86-13
Comment: cat -n is not standard; follow the recommendation in posix for using pr -n -t in its place.
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 36: Line 36:
Using pr(1) (and grep(1) (and cut(1))): Using nl(1) (and grep(1) (and cut(1))):
Line 39: Line 39:
   pr -n -t 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 2020-05-07 08:35:17 by intranet)