📖 Scenario: You have a text file with information about fruits and their prices. You want to use awk to process this data and extract useful information.
🎯 Goal: Learn how to use awk to read fields from a text file and print specific columns.
📋 What You'll Learn
Use awk to process text data
Understand fields and how to access them with $1, $2, etc.
Print specific fields from each line
💡 Why This Matters
🌍 Real World
Processing text files with columns of data is common in system logs, reports, and CSV files. <code>awk</code> helps extract and manipulate this data quickly.
💼 Career
Many IT, data analysis, and system administration jobs require basic <code>awk</code> skills to automate data extraction and reporting.
Progress0 / 4 steps
1
Create the data file
Create a file named fruits.txt with these exact lines: Apple 100 Banana 50 Cherry 75
Linux CLI
Hint
Use echo with -e and redirect output to fruits.txt.
2
Set the field separator
Write an awk command that uses space as the field separator explicitly with -F " " and reads from fruits.txt.
Linux CLI
Hint
Use awk -F " " '{print $1, $2}' fruits.txt to print both fields.
3
Print only the fruit names
Modify the awk command to print only the first field (fruit name) from fruits.txt.
Linux CLI
Hint
Use {print $1} to print only the first field.
4
Print fruit names with prices doubled
Write an awk command that prints the fruit name and the price multiplied by 2 from fruits.txt.
Linux CLI
Hint
Use {print $1, $2 * 2} to multiply the second field by 2.
Practice
(1/5)
1. What does $2 represent in an awk command?
easy
A. The number of fields in the current line
B. The entire current line
C. The first character of the line
D. The second field (word) in the current line
Solution
Step 1: Understand how awk splits lines
awk automatically splits each input line into fields separated by spaces or tabs.
Step 2: Identify what $2 means
$2 refers to the second field (word) in the current line.
Final Answer:
The second field (word) in the current line -> Option D
Quick Check:
$2 = second field [OK]
Hint: Remember: $1 is first word, $2 second, and so on [OK]
Common Mistakes:
Confusing $2 with the whole line ($0)
Thinking $2 is the number of fields (NF)
Mixing field numbers with character positions
2. Which of the following is the correct syntax to print the third field of each line using awk?
easy
A. awk '{print $3}' filename
B. awk 'print $3' filename
C. awk '{print 3}' filename
D. awk '{print $}' filename
Solution
Step 1: Recall the basic awk print syntax
The print statement must be inside braces: {print $3}.
Step 2: Check each option
awk '{print $3}' filename uses correct braces and $3. Options B, C, and D have syntax errors or wrong usage.
Final Answer:
awk '{print $3}' filename -> Option A
Quick Check:
Print field 3 with braces [OK]
Hint: Always use braces { } around print commands in awk [OK]
Common Mistakes:
Omitting braces around print statement
Printing a number instead of a field variable
Using incomplete or invalid field syntax
3. Given a file data.txt with the following content:
apple 10 red
banana 5 yellow
cherry 20 red
What is the output of awk '{print $1, $3}' data.txt?
medium
A. apple red
banana yellow
cherry red
B. apple
banana
cherry
C. 10 red
5 yellow
20 red
D. apple 10
banana 5
cherry 20
Solution
Step 1: Identify fields in each line
Each line has three fields: $1=fruit, $2=number, $3=color.
Step 2: Understand the print command
awk '{print $1, $3}' prints the first and third fields separated by space.
Final Answer:
apple red
banana yellow
cherry red -> Option A
Quick Check:
Print first and third fields [OK]
Hint: Match $1, $2, $3 to columns in order [OK]
Common Mistakes:
Mixing up field numbers
Printing wrong fields or all fields
Ignoring spaces between printed fields
4. What is wrong with this command: awk '{print $4}' data.txt if data.txt has only 3 fields per line?
medium
A. It prints the third field instead
B. It causes a syntax error
C. It prints an empty line for each input line
D. It prints the entire line
Solution
Step 1: Understand field numbering in awk
Fields are numbered from 1 to NF (number of fields). If $4 is requested but only 3 fields exist, $4 is empty.
Step 2: Predict output behavior
Printing $4 prints nothing, resulting in empty lines for each input line.
Final Answer:
It prints an empty line for each input line -> Option C
Quick Check:
Missing field prints empty [OK]
Hint: Fields beyond NF print empty, no error [OK]
Common Mistakes:
Expecting syntax error for missing fields
Thinking it prints last field instead
Assuming it prints whole line if field missing
5. You want to print only the lines from file.txt where the second field is greater than 100 using awk. Which command achieves this?
hard
A. awk '{if $2 > 100 print $0}' file.txt
B. awk '$2 > 100 {print $0}' file.txt
C. awk '{print $0 if $2 > 100}' file.txt
D. awk '$2 => 100 {print $0}' file.txt
Solution
Step 1: Understand condition syntax in awk
Conditions go before the action block. The correct comparison operator is >, not =>.