Why file I/O is core to scripting in Bash Scripting - Performance Analysis
File input and output (I/O) is a key part of many scripts. Understanding how the time to read or write files grows helps us write better scripts.
We want to know how the script's running time changes as the file size changes.
Analyze the time complexity of the following code snippet.
#!/bin/bash
filename="$1"
while IFS= read -r line
do
echo "$line"
done < "$filename"
This script reads a file line by line and prints each line to the screen.
- Primary operation: Reading each line from the file one by one.
- How many times: Once for every line in the file.
As the file gets bigger, the script reads more lines, so it takes longer.
| Input Size (lines) | Approx. Operations |
|---|---|
| 10 | 10 reads and prints |
| 100 | 100 reads and prints |
| 1000 | 1000 reads and prints |
Pattern observation: The time grows directly with the number of lines. Double the lines, double the work.
Time Complexity: O(n)
This means the script's running time grows in a straight line with the file size.
[X] Wrong: "Reading a file line by line is always instant, no matter the size."
[OK] Correct: Larger files have more lines, so the script must do more work, which takes more time.
Knowing how file reading scales helps you explain script performance clearly. This skill shows you understand how scripts handle real data sizes.
"What if we read the whole file at once instead of line by line? How would the time complexity change?"
Practice
Solution
Step 1: Understand file I/O purpose
File I/O lets scripts handle data stored in files, such as logs or reports.Step 2: Connect file I/O to automation
By reading and writing files, scripts can automate many tasks involving data processing.Final Answer:
It allows scripts to read from and write to files, automating tasks. -> Option BQuick Check:
File I/O = Automate file data handling [OK]
- Confusing file I/O with internet access
- Thinking file I/O speeds up script execution
- Assuming file I/O prevents all script errors
Solution
Step 1: Identify output redirection syntax
In bash, using > after a command sends its output to a file, overwriting it.Step 2: Check other options for correctness
> is correct; >> appends, < reads input, | pipes output, so only > fits the question.Final Answer:
command > output.txt -> Option DQuick Check:
Output redirection uses > [OK]
- Using < instead of > for output
- Confusing >> (append) with > (overwrite)
- Using invalid symbols like |>
output.txt after running this script?echo "Hello" > output.txt echo "World" >> output.txt
Solution
Step 1: Analyze first echo command
The first echo writes "Hello" to output.txt, overwriting any existing content.Step 2: Analyze second echo command
The second echo appends "World" to output.txt, adding it on a new line.Final Answer:
Hello World -> Option AQuick Check:
First overwrite, then append with newline [OK]
- Thinking >> overwrites instead of appends
- Ignoring newline added by echo
- Assuming output is just 'Hello' or 'World'
cat < input.txt
Solution
Step 1: Understand cat command usage
cat reads and prints file content when given the filename as an argument.Step 2: Check input redirection usage
Using < input.txt is valid but redundant here; 'cat input.txt' is simpler and standard.Final Answer:
The input redirection < is unnecessary; use 'cat input.txt' instead. -> Option CQuick Check:
cat filename is simpler than cat < filename [OK]
- Confusing input redirection with output redirection
- Using > or >> instead of < for input
- Adding unnecessary quotes around filename
users.txt and writes a greeting for each user into greetings.txt. Which script snippet correctly does this?Solution
Step 1: Understand reading lines from a file
The 'while read user; do ... done < users.txt' reads each line (username) from users.txt correctly.Step 2: Check writing greetings
Inside the loop, echo appends a greeting line to greetings.txt for each user.Final Answer:
while read user; do echo "Hello, $user!" >> greetings.txt; done < users.txt -> Option AQuick Check:
Loop reads lines and appends greetings [OK]
- Using for loop incorrectly on filename instead of lines
- Overwriting greetings.txt inside loop instead of appending
- Misusing cat with echo without looping
Ready to prove it?
Pass the test and this pattern moves unknown
