FUNDAMENTALS A Complete Guide for Beginners
The sort command in Linux is used to sort lines of text files. It is capable of sorting alphabetically and numerically, in ascending or descending order. It considers all contents as ASCII and rearranges them based on ASCII value. However, you can manipulate your output by providing a variety of options. In this article, I will show you the usage of the sort command in Linux with tons of examples.
A. Description
The sort command is common in Unix and Unix-like Operating systems. It is part of GNU Coreutils written by Mike Haertel and Paul Eggert. In ASCII every character has a numerical value. For example, the ASCII value of “A” is 65 and 97 for “a”. The sort command uses this value. So, if you want to sort “A” and “a”, “A” will always appear at the beginning. But you can make it case insensitive. You do numerical sorting, reverse sorting and all sort of things.
B. Syntax
The syntax of the sort command in Linux is simple. The syntax is sort, followed by one or multiple options and one or multiple files.
sort [OPTION]... [FILE]...
C. Options
There are many options available for the sort command in Linux. You can check those yourself by going to the manual page. Type the following command-
man sort
Useful Options:
- -f, –ignore-case (make sort case insensitive)
- -M, –month-sort (sort by month)
- -n, –numeric-sort (compare based on numerical value)
- -R, –random-sort (shuffle the contents of the file)
- -r, –reverse (reverse the comparison)
- -c, –check ( check whether a file is sorted or not)
- -k, –key( sort by key)
- -o, –output (used to print output in another file)
- -u, –unique (remove duplicates)
Configuring Your System
While following the examples below, some of you might run into this problem. You might see a different output than mine! I highly recommend you do one or two examples first, then come back here if you need to.
If you see different results, the most probable cause might be the localization settings. In short, “localization” refers to the language the operating system is using. Each character in a system is represented in a certain order and changing the locale settings might affect the output of the sort command in Linux.
For a temporary solution, follow the steps below:
- At first open the Terminal
- Type the following command in the command prompt:
export LC_ALL=C
- Now, press the ENTER button.
Note: If you close the Terminal, you will return to the previous condition. You need to follow the steps above again.
For a permanent solution, follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
nano ~/.bashrc
- Now, press the ENTER button.
- Add, the following line at the end
export LC_ALL=C
- To save press CTRL + O and ENTER, to exit press CTRL + X.
- Now, type the following line and press ENTER.
source ~/.bashrc
I have added two photos for you. The two commands below are for opening the .bashrc file and updating the environment.After opening the .bashrc file in the nano text editor, add an extra line like the one below, then update the environment.
Practical Examples of the “sort” Command in Linux
Here I will show you some examples of the sort command in Linux. As sort rearranges the contents of a file, I will use some files (letters, mix_letters, words, month, data.csv) throughout these examples. You can download those files from below:
Example 1: Sort a File with Lower Cases of Single Letters
At first, I am going to show how the sort command in Linux arranges multiple letters. I will work with the letters file here. Follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort letters
- Now, press the ENTER button.
I have already told you that the sort command uses ASCII to sort content. The letter “a” is 97, whereas the letter “z” is 122 in ASCII. That’s why, as you can see, a is on the top.
Similar Readings
- The “grep” Command in Linux [10+ Practical Examples]
- The “wc” Command in Linux [15 Practical Examples]
Example 2: Sort a File with Mix Cases of Single Letters
Let’s see what happens when capital and small letters are mixed together. I will work with the mix_letters file here. Follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort mix_letters
- Now, press the ENTER button.
In ASCII, values of letters “A”, “Z”, “a” and “z” are 65, 90,97 and 122 respectively. As a result, you will see capital letters at the top of small letters for the sort command in Linux.
Example 3: Case-Insensitive Sorting Using the “sort” Command in Linux
Now, what if you want to sort in a case-insensitive way? You can do that by doing the following. I will use the mix_letters file here:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort -f mix_letters
- Now, press the ENTER button.
As you can capital letters and small letters are together now. But it is still following ASCII order; as you can see “A” came before “a”.
Example 4: Sort a File with Words
Now let’s sort some words. I will use the words file here. Follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort words
- Now, press the ENTER button.
This one requires some explanation. Words (or sentences) are sorted based on the first letter. Now, what if the first two letters of two words are similar? Then sort will look for the second letter of the word and sort them accordingly. Here, “zebra” and “zoo” both have the letter “z” at the beginning. Now for the second letter, “e” comes before “o”. That’s why “zebra” is on top of “zoo”. Now, what if there are two exact words (or sentences) like “today” here? The sort command will just keep them together.
Example 5: Numerical Sorting Using the “sort” Command in Linux
The sort command in Linux is capable of sorting numerically. You can try it by doing the steps below. I will use the numbers file here:
- At first, open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort -n numbers
- Now, press the ENTER button.
As you can see, at first, the numbers were disordered; now they are ordered.
Example 6: Reverse Sorting Using the “sort” Command in Linux
Reverse sorting means turning the order upside down. Now the highest value will be at the top whereas the lowest value at the bottom. I think using the numbers file will be convenient here. You can do reverse-sorting by doing the following:
- At first, open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort -r numbers
- Now, press the ENTER button.
As you can the numbers are reversely sorted now.
Example 7: Sort Multiple Files
Sorting multiple files is pretty simple. It is a lot similar to sorting a single file. You just need to put multiple files as arguments. I will use both words and numbers files here:
- At first, open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort words -n numbers
- Now, press the ENTER button.
The sort command will take the contents of all files as a whole and sort them.
Example 8: Sort a Column Using the sort Command in Linux
The sort command in Linux can sort column-wise. You all know about ls -l, right? If not, that’s okay. “ls -l” shows you information about files and directories, where the 4th column shows file size. Now I sort that column using the option “-k”. You can do that with me by following the steps below:
- At first, open the Ubuntu Terminal.
- Type the following command in the command prompt:
ls -l | sort -nk2
Note: The “2” after “k” denotes the column number. I also put the option “-n” as I am working with numbers. - Now, press the ENTER button.
Now, after sorting, as you can see, the sizes are in ascending order.
Similar Readings
- The “nano” Command in Linux [13 Practical Examples]
- The “cut” Command in Linux [8 Practical Examples]
- The “jed” Command in Linux [8 Practical Examples]
Example 9: Sort and Remove Duplicates Using the sort Command in Linux
You may remember, in example 4, there were two similar words. You can remove duplicates by using the option “-u” (the “u” comes from the word “unique”). It can be called it unique sorting as well. I will use the words file here. Now follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:sort -u words
- Now, press the ENTER button.
At first, see there are two “today”. After unique sorting, as you can see, there is only one “today”.
Example 10: Sort by Month Using the sort Command in Linux
The sort command in Linux has a feature to sort by month. However, it doesn’t care about days or months. As you have guessed, I am going to use the months file. Follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort months
- Now press the ENTER button.
As you can see the months are ordered now.
Example 11: Sort and Save Output into Another File
You can always redirect your output of the sort command into a file. But the sort command in Linux comes with an extra feature as well. You save your output by following the steps below. Let’s use the numbers file here:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort -o sorted_file numbers
Note: Be careful. You need to type the name of the output file first, then the input file.
- Now, press the ENTER button.
I used the file sorted_file to store my output and the cat command to show you the contents of the file.
Example 12: Check if a File is Sorted or Not Using the sort command in Linux
Sometimes, mostly for scripting, you may require to check whether a file is sorted or not. You can do this simply by following the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort -c sorted_file
- Now, press the ENTER button.
I used the file sorted_file from the previous example for this example. If your file is sorted, you won’t get noticeable output. But if not sorted, you will expect to see something like the second line here.
Example 13: Random Sort Using the sort Command in Linux
Sometimes you may require to generate random output. The sort command in Linux can do that for you, even if the reputation of its name is at stake!! Let’s use the sorted_file from “Example 11”. Follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort -R sorted_file
- Now, press the ENTER button.
My result may match yours. You will get different results every time.
Similar Readings
- The “vi” Command in Linux [6 Practical Examples]
- The “vim” Command in Linux [8 Practical Examples]
- The “egrep” Command in Linux [10+ Practical Examples]
Example 14: Combining “sort” and “join” Command
The join is used to join lines of two files. To join sorted files, follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
cat join <(sort words) <(sort -n numbers)
Note: you are welcome to provide any option you like as long as they are inside the parentheses. And spacing matters. - Now, press the ENTER button.
You will see the difference between “sorting multiple files” and “joining sorted files”. The joint command just joined the output of two different files, nothing else.
Example 15: Sorting by a Delimiter
The default delimiter for the sort command in Linux is whitespace. However, you can work with other delimiters. For this example, I will use a CSV (data.csv) file and the delimiter of CSV file is the comma(,). Now I will use the option “-t”, and remember you need the provide your delimiter to it. Now follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort -t, -k3 data.csv
- Now, press the ENTER button.
I will give a further explanation here. See, there is a comma (,) after the option “-t” because our delimiter is a comma. Now, I wrote “-k3” because I wanted to sort the 3rd column.
Example 16: Sort by Field
Now here is an interesting problem. If you want to sort the 2nd column with delimiter and column, you will see something like this. It is based on the “Mr.” and “Ms.” at the beginning. But I want to sort based on names. How will I do that?
The answer is simple. Defining columns isn’t enough now, we need to define fields, which the sort command will use for comparison and sorting. Follow the steps below:
- At first open the Ubuntu Terminal.
- Type the following command in the command prompt:
sort -t, -k2.3,2.5 data.csv
- Now, press the ENTER button.
You already know the purpose of “-t,”, right? Now next part, “-k2.3,2.5”. The “k” denotes the key (column), where 2 is the key (column) number. The 3 after the dot (.) denotes the starting field position and the 5 denotes the ending field position. So how our sort command is working here? First, it will go to the second column, ignore the first three fields (characters) and then use the next two fields (characters) for comparison.
Conclusion
The sort command in Linux is one of the basic commands. It is a useful tool for all types of users. Practicing all the examples above will help you to have a farm idea on the sort command.
Similar Readings
- The “paste” Command in Linux [6 Practical Examples]
- The “split” Command in Linux [6 Practical Examples]
- The “sed” Command in Linux [7 Practical Examples]
- The “tr” Command in Linux [6 Practical Examples]
- The “uniq” Command in Linux [6 Practical Examples]
- The “printf” Command in Linux [8 Practical Examples]