Write a shell script called longest.sh
that takes the name of a directory and a filename extension as its arguments, and prints out the name of the file with the most lines in that directory with that extension. For example:
$ bash longest.sh shell-lesson-data/data/pdb pdb
would print the name of the .pdb
file in shell-lesson-data/data/pdb
that has the most lines.
Feel free to test your script on another directory e.g.
$ bash longest.sh shell-lesson-data/writing/data txt
# Shell script which takes two arguments:
# 1. a directory name
# 2. a file extension
# and prints the name of the file in that directory
# with the most lines which matches the file extension.
wc -l $1/*.$2 | sort -n | tail -n 2 | head -n 1
The first part of the pipeline, wc -l $1/*.$2 | sort -n
, counts the lines in each file and sorts them numerically (largest last). When there’s more than one file, wc
also outputs a final summary line, giving the total number of lines across all files. We use tail -n 2 | head -n 1
to throw away this last line.
wc -l $1/*.$2 | sort -n | tail -n 1
we’ll see the final summary line: we can build our pipeline up in pieces to be sure we understand the output.