Differences between revisions 1 and 8 (spanning 7 versions)
Revision 1 as of 2007-05-02 22:55:48
Size: 620
Editor: redondos
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 3: Line 3:
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. The dirty (but not quick) way would be:
{{{
    
sed -n ${n}p "$file"
}}}
Line 5: Line 8:
The following {{{sed}}} command line reads a file printing nothing (-n). At line $n the command "p" is run, printing it, with a "q" afterwards: quit the program. but this reads the whole input file, even if you only wanted the third line.
Line 7: Line 10:
This one avoids that problem:
Line 11: Line 15:
Another way, more obvious to some, is to grab the last line from a listing of the first n lines: 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:
Line 16: Line 22:
Using awk: Another approach, using ["AWK"]:
Line 18: Line 24:
   awk 'NR==n{print;exit}' file    awk "NR==$n{print;exit}" file
Line 20: Line 26:

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
}}}

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)