sort - sort lines in a stream¶
The sort
program takes lines of text as input and outputs the text in alphabetical-sorted order.
To sort the lines in a file:
$ sort fruits.txt
The most common use, though, is to sort lines from standard inpput, piped in from another program:
$ curl http://2017.compciv.org/_downloads/fruits.txt | sort
Use-cases¶
Sorting in reverse¶
If you want the list of sorted lines to be in descending order, i.e. z
before a
, use the -r
flag:
$ sort -r fruits.txt
Sorting numbers¶
By default, sort
sorts alphabetically. When numbers are treated as just characters, then 100
will be less than 9
.
Given this list of numbers:
99
8
0
100
42
-7
The default sorting behavior will result in:
-7
0
100
42
8
99
Using the -n
flag will force sort
to rank numerical characters by their numerical order:
$ sort -n numbers.txt
The result:
-7
0
8
42
99
100
Sorting in reverse numerical order¶
A very common use-case is to sort a list of numbers in reverse-order, i.e. biggest on top. You can call sort
with both the -r
and the -n
flags:
$ sort -r -n numbers.txt
# alternatively, you can combine the flags like this:
$ sort -rn numbers.txt
A very common question is to look for the “Top N” of a sorted list. So pipe sort
into head
.
The following example reads the data from a remote URL via curl
, pipes it into sort
, and finally into head
to show only the top 5 numbers
$ curl http://2017.compciv.org/_downloads/numbers.txt \
| sort -rn \
| head -n 5
A necessary step before uniq¶
The uniq
program is a nice example of a Unix program that does something very focused: it takes in a stream of lines, and outputs just the unique lines. But it can do this unique/grouping comparison line-by-line. In other words, if you feed it a file in which “apples” is the first line and “apples” is the last line, and there are a bunch of non-“apples” lines in between, uniq
will not know that apples
was duplicated.
In order to get the intended effect of uniq
, sort
is used to sort the lines of text before piping into uniq
:
$ curl http://2017.compciv.org/_downloads/fruits.txt | sort | uniq
Sorting by most frequent occurrences¶
The sort
program, in modern implementations, does have a -u
flag that effectively does the uniq
function, without actually having to call uniq
:
$ curl http://2017.compciv.org/_downloads/fruits.txt | sort -u