Next we’ll use the sort
command to sort the contents of the lengths.txt
file.
But first we’ll use an exercise to learn a little about the sort command:
sort -n
Do?The file shell-lesson-data/numbers.txt
contains the following lines:
10
2
19
22
6
If we run sort
on this file, the output is:
10
19
2
22
6
If we run sort -n
on the same file, we get this instead:
2
6
10
19
22
Explain why -n
has this effect.
We will also use the -n
option to specify that the sort is
numerical instead of alphanumerical.
This does not change the file;
instead, it sends the sorted result to the screen:
$ sort -n lengths.txt
9 methane.pdb
12 ethane.pdb
15 propane.pdb
20 cubane.pdb
21 pentane.pdb
30 octane.pdb
107 total
We can put the sorted list of lines in another temporary file called sorted-lengths.txt
by putting > sorted-lengths.txt
after the command,
just as we used > lengths.txt
to put the output of wc
into lengths.txt
.
Once we’ve done that,
we can run another command called head
to get the first few lines in sorted-lengths.txt
:
$ sort -n lengths.txt > sorted-lengths.txt
$ head -n 1 sorted-lengths.txt
9 methane.pdb
Using -n 1
with head
tells it that we only want the first line of the file;
-n 20
would get the first 20,and so on. Since sorted-lengths.txt
contains the
lengths of our files ordered from least to greatest, the output of head
must be
the file with the fewest lines.
It’s a very bad idea to try redirecting the output of a command that operates on a file to the same file. For example:
$ sort -n lengths.txt > lengths.txt
Doing something like this may give you incorrect results and/or delete the contents
of lengths.txt
.
>>
Mean? (Hint: It means “append”)We have seen the use of >
, but there is a similar operator >>
which works slightly differently.
We’ll learn about the differences between these two operators by printing some strings.
We can use the echo
command to print strings e.g.
$ echo The echo command prints text
The echo command prints text
Now test the commands below to reveal the difference between the two operators:
$ echo hello > testfile01.txt
and:
$ echo hello >> testfile02.txt
Hint: Try executing each command twice in a row and then examining the output files.
We have already met the head
command, which prints lines from the start of a file.
tail
is similar, but prints lines from the end of a file instead.
Consider the file shell-lesson-data/data/animals.txt
.
After these commands, select the answer that
corresponds to the file animals-subset.txt
:
$ head -n 3 animals.txt > animals-subset.txt
$ tail -n 2 animals.txt >> animals-subset.txt
animals.txt
animals.txt
animals.txt
animals.txt