Differences between revisions 6 and 8 (spanning 2 versions)
Revision 6 as of 2007-09-21 06:19:45
Size: 1055
Editor: ns1
Comment: ok for $file, but $x and $y are supposed to be bash parameters
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 cat(1) (and grep(1) (and cut(1))): Using nl(1) (and grep(1) (and cut(1))):
Line 39: 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 2020-05-07 08:35:17 by intranet)