<> == How can I print the n'th line of a file? == One dirty (but not quick) way is: {{{#!highlight bash sed -n "${n}p" "$file" }}} But this reads the entire file even if only the third line is desired, which can be avoided by using the `q` command to quit on line `$n`, and deleting all other lines with the `d` command: {{{#!highlight bash sed "${n}q;d" "$file" }}} Another method is to grab lines starting at `n`, then get the first line of that. {{{#!highlight bash tail -n "+$n" "$file" | head -n 1 }}} Another approach, using [[AWK]]: {{{#!highlight bash awk -v n="$n" 'NR==n{print;exit}' "$file" }}} If more than one line is needed, it's easy to adapt any of the previous methods: {{{#!highlight bash 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 head -n "$y" "$file" | tail -n "+$x" # If your tail supports it awk -v x="$x" -v y="$y" 'NR>=x{print} NR==y{exit}' "$file" # Same }}} Or a counter with a simple `read` loop: {{{#!highlight bash # Bash/ksh m=0 while ((m++ < n)) && read -r _; do : done head -n 1 }}} To read into a variable, it is preferable to use `read` or `mapfile` rather than an external utility. More than one line can be read into the given array variable or the default array `MAPFILE` by adjusting the argument to mapfile's -n option: {{{#!highlight bash # Bash4 mapfile -ts "$((n - 1))" -n 1 x <"$file" printf '%s\n' "$x" }}} === See Also === * [[BashFAQ/001]] * http://wiki.bash-hackers.org/commands/builtin/mapfile ---- CategoryShell