Skip to content

LeetCode 195: Tenth Line

A clear explanation of the Tenth Line shell problem using awk, sed, head, and tail.

Problem Restatement

We are given a text file named file.txt.

We need to print only the tenth line of the file.

If the file has fewer than ten lines, the script should print nothing.

Example input:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

Expected output:

Line 10

Input and Output

ItemMeaning
InputA file named file.txt
OutputThe tenth line only
Missing tenth linePrint nothing
LanguageBash shell script

Examples

Input:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

Output:

Line 10

If the file contains only three lines:

Line 1
Line 2
Line 3

The output is empty, because there is no tenth line.

First Thought

We only care about one line.

So we do not need to process or transform the whole file.

We need a command that can identify line number 10 and print exactly that line.

Several Unix tools can do this:

ToolIdea
awkPrint the line where NR == 10
sedPrint only line 10
head and tailKeep the first 10 lines, then take the last one

Key Insight

In awk, NR means the current record number.

For normal text files, each record is one line.

So the tenth line is exactly the line where:

NR == 10

When this condition is true, awk prints the current line.

Algorithm

Read the file line by line.

For each line:

  1. Track its line number.
  2. If the line number is 10, print it.
  3. Ignore all other lines.

With awk, this becomes one command.

Correctness

awk processes the file one line at a time.

For each line, NR stores the current line number.

The condition NR == 10 is true only for the tenth line.

Therefore, awk 'NR == 10' file.txt prints the tenth line and no other line.

If the file has fewer than ten lines, the condition is never true, so nothing is printed.

Complexity

Let n be the number of lines in the file.

MetricValueWhy
TimeO(n)In the simple form, awk may scan through the file
SpaceO(1)It processes one line at a time

Implementation

# Read from the file file.txt and output the tenth line to stdout.
awk 'NR == 10' file.txt

Code Explanation

The command is:

awk 'NR == 10' file.txt

awk reads file.txt line by line.

NR is the current line number.

When NR equals 10, the condition is true.

In awk, when a condition is true and no explicit action is given, the default action is to print the current line.

So this command prints only line ten.

Alternative Implementations

Using sed:

sed -n '10p' file.txt

The -n option disables automatic printing.

The command 10p prints only line 10.

Using head and tail:

head -n 10 file.txt | tail -n 1

head -n 10 keeps the first ten lines.

tail -n 1 prints the last line from those ten lines.

If the file has at least ten lines, that line is the tenth line.

Testing

Create a sample file:

cat > file.txt << 'EOF'
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
EOF

Run the solution:

awk 'NR == 10' file.txt

Expected output:

Line 10

Test a file with fewer than ten lines:

cat > file.txt << 'EOF'
Line 1
Line 2
Line 3
EOF

Expected output is empty.

Test a file with more than ten lines:

cat > file.txt << 'EOF'
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Line 11
EOF

Expected output:

Line 10