Sorting Numbers
Problem
When sorting numeric data you notice that the order doesn’t seem right:
$ sort somedata 2 200 21 250 $
Solution
You need to tell sort that the data should be
sorted as numbers. Specify a numeric sort with the -n option:
$ sort -n somedata 2 21 200 250 $
Discussion
There is nothing wrong with the original (if odd) sort order if
you realize that it is an alphabetic sort on the data (i.e., 21 comes
after 200 because 1 comes after 0 in an alphabetic sort). Of course,
what you probably want is numeric ordering, so you need to use the
-n option.
sort -rn can be very handy in giving you a descending frequency list of
something when combined with uniq -c.
For example, let’s display the most popular shells on this
system:
$ cut -d':' -f7 /etc/passwd | sort | uniq -c | sort -rn
20 /bin/sh
10 /bin/false
2 /bin/bash
1 /bin/synccut -d':' -f7 /etc/passwd
isolates the shell from the /etc/passwd file. Then
we have to do an initial sort so that uniq will
work. uniq -c counts consecutive,
duplicate lines, which is why we need the pre-sort. Then sort
-rn gives us a reverse, numerical sort, with the most popular
shell at the top.
If you don’t need to count the occurrences and just want a unique
list of values—i.e., if you want sort to remove
duplicates—then you can use the -u
option on the sort command (and omit the
uniq command). So to find just the list of
different shells on this system:
cut -d':' -f7 /etc/passwd | sort -u
See Also
man sort
man uniq
man cut
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access