Differences between revisions 7 and 9 (spanning 2 versions)
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 9 as of 2007-10-16 13:55:46
Size: 1070
Editor: p54BFE162
Comment: make cut work (with tabs in the file cut -f2 would only give part of the desired output) -- shouldn't this example be removed?! -- so much prettier in sed/awk.
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 1 --complement

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 1 --complement

BashFAQ/011 (last edited 2020-05-07 08:35:17 by intranet)