AMP AMP

Sort Command in Linux with Examples

Sort Command

In this article we will cover about various Sort command used in Linux. It is used to print lines of input text files in sorted order.

To create a text file

Options
-e enables interpretation of backslash
/n tells echo to write each string to new line

[user1@linuxhelp Desktop]$ echo -e " centos
redhat
debian
linuxmint
arch
ubuntu
fedora
opensuse
mageia
manjaro"  >  os.txt

To look at the contents of file

[user1@linuxhelp Desktop]$ cat os.txt
centos
redhat
debian
linuxmint
arch
ubuntu
fedora
opensuse
mageia
manjaro

To sort contents of file

The following sort command is used to sort contents of file.

[user1@linuxhelp Desktop]$ sort os.txt 
arch
centos
debian
fedora
linuxmint
mageia
manjaro
opensuse
redhat
ubuntu

It shows the sorted output of the file in the terminal.

To verify the Contents

Redirect the os.txt file to sorted.txt file. Now use cat command to verify the Contents of file.

[user1@linuxhelp Desktop]$ sort os.txt >  sorted.txt
[user1@linuxhelp Desktop]$ cat sorted.txt 
arch
centos
debian
fedora
linuxmint
mageia
manjaro
opensuse
redhat
ubuntu

To sort in reverse order

The following sort command is used to sort in reverse order. -r switch is used to redirect output of a file in reverse order.

[user1@linuxhelp Desktop]$ sort -r os.txt >  rsorted.txt
[user1@linuxhelp Desktop]$ cat rsorted.txt 
ubuntu
redhat
opensuse
manjaro
mageia
linuxmint
fedora
debian
centos
arch

To create new file in same location

To list
ls -l is used to list the output in the home directory.

[user1@linuxhelp Desktop]$ ls -l /home/user1/Documents/ >  /home/user1/Desktop/new.txt
[user1@linuxhelp Desktop]$ cat new.txt 
total 24
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir5
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir6
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir7
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file1
-rw-rw-r-- 1 user1 user1   62 Mar  9 15:53 file2
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file3
-rw-rw-r-- 1 user1 user1   23 Mar  9 15:53 file4
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:53 test

To sort contents of file ‘ new.txt‘ on the basis of 2nd column

The following sort command -k is used to sort a file on basis of the column.

Example
Based on 2nd column

[user1@linuxhelp Desktop]$ sort -nk2 new.txt 
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file1
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file3
-rw-rw-r-- 1 user1 user1   23 Mar  9 15:53 file4
-rw-rw-r-- 1 user1 user1   62 Mar  9 15:53 file2
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir5
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir6
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir7
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:53 test
total 24

-n option is used to specify the integers in the specified column.
Based on 9th column

[user1@linuxhelp Desktop]$ sort -k9 new.txt 
total 24
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir5
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir6
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir7
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file1
-rw-rw-r-- 1 user1 user1   62 Mar  9 15:53 file2
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file3
-rw-rw-r-- 1 user1 user1   23 Mar  9 15:53 file4
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:53 test

To pipeline it directly on the terminal with actual command

To list the contents in the documents folder directly in sorted order follow the below command.

[user1@linuxhelp Desktop]$ ls -l /home/user1/Documents | sort -nk5
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file1
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file3
total 24
-rw-rw-r-- 1 user1 user1   23 Mar  9 15:53 file4
-rw-rw-r-- 1 user1 user1   62 Mar  9 15:53 file2
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir5
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir6
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir7
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:53 test

To sort and remove duplicates

In os.txt file " arch" is repeated twice using -u option we can remove the duplicate one.

[user1@linuxhelp Desktop]$ cat os.txt 
centos
arch
redhat
debian
linuxmint
arch
ubuntu
fedora
opensuse
mageia
manjaro
redhat
[user1@linuxhelp Desktop]$ sort -u os.txt 
arch
centos
debian
fedora
linuxmint
mageia
manjaro
opensuse
redhat
ubuntu

To sort contents of two files in single output

To sort and display the contents of os.txt file and new.txt file in single output.

[user1@linuxhelp Desktop]$ sort os.txt new.txt 
arch
arch
centos
debian
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir5
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir6
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir7
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:53 test
fedora
linuxmint
mageia
manjaro
opensuse
redhat
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file1
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file3
-rw-rw-r-- 1 user1 user1   23 Mar  9 15:53 file4
-rw-rw-r-- 1 user1 user1   62 Mar  9 15:53 file2
total 24
ubuntu

To sort, merge and display the contents of os.txt file and new.txt file in single output.

[user1@linuxhelp Desktop]$ sort -u os.txt new.txt
arch
centos
debian
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir5
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir6
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir7
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:53 test
fedora
linuxmint
mageia
manjaro
opensuse
redhat
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file1
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file3
-rw-rw-r-- 1 user1 user1   23 Mar  9 15:53 file4
-rw-rw-r-- 1 user1 user1   62 Mar  9 15:53 file2
total 24
ubuntu

To create a text file ' month.txt'

[user1@linuxhelp Desktop]$ echo -e " march
april
july
june
jan
oct"  >  month.txt
[user1@linuxhelp Desktop]$ cat month.txt 
march
april
july
june
jan
oct

To sort the file ‘ month.txt‘ on the basis of month order

Use switch -M to sort the file ‘ month.txt‘ on the basis of month order -month-sort

[user1@linuxhelp Desktop]$ sort -M month.txt 
jan
march
april
june
july
oct

To check if files are sorted or not using sort command

Using -c option you can check if the file is sorted or not. If it is sorted it won’ t display any output

[user1@linuxhelp Desktop]$ sort -c sorted.txt

Or else it will display the disordered line number.

[user1@linuxhelp Desktop]$ sort -c os.txt 
sort: os.txt:2: disorder: arch

To Sort on the basis of column

For contents separated by anything other than space like ‘ |’ or ‘ ’ or ‘ +’ or ‘ .’

[user1@linuxhelp Desktop]$ echo -e " 34+windows+linux+unix
45+mageia+opensuse+redhat
546+mongodb+tomcat+perl
5+python+java+php
368+zimbra+lotus+gmail"  >  linux.txt
[user1@linuxhelp Desktop]$ cat linux.txt 
34+windows+linux+unix
45+mageia+opensuse+redhat
546+mongodb+tomcat+perl
5+python+java+php
368+zimbra+lotus+gmail

To sort file on the basis of 1st field

The following sort command is used to sort file on the basis of 1st field.

[user1@linuxhelp Desktop]$ sort -t ' +'  -nk1 linux.txt 
5+python+java+php
34+windows+linux+unix
45+mageia+opensuse+redhat
368+zimbra+lotus+gmail
546+mongodb+tomcat+perl
[user1@linuxhelp Desktop]$ sort -t ' +'  -k4 linux.txt 
368+zimbra+lotus+gmail
546+mongodb+tomcat+perl
5+python+java+php
45+mageia+opensuse+redhat
34+windows+linux+unix

To sort the contents of ' ls -l' command for your home directory

On basis of 5th column
It returns the values based on the amount of data in random order.

[user1@linuxhelp Desktop]$ ls -l /home/user1/Documents/ | sort -k5 -R
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir5
total 24
-rw-rw-r-- 1 user1 user1   62 Mar  9 15:53 file2
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file1
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir6
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:53 test
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file3
-rw-rw-r-- 1 user1 user1   23 Mar  9 15:53 file4
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir7

Whereas if you run the same command next time it won’ t return the same output

[user1@linuxhelp Desktop]$ ls -l /home/user1/Documents/ | sort -k5 -R
-rw-rw-r-- 1 user1 user1   62 Mar  9 15:53 file2
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file3
total 24
-rw-rw-r-- 1 user1 user1    0 Mar  9 15:52 file1
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir5
-rw-rw-r-- 1 user1 user1   23 Mar  9 15:53 file4
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir7
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:53 test
drwxrwxr-x 2 user1 user1 4096 Mar  9 15:52 dir6

To override the default sorting preference

Before the override option is to be used we have to export the environment variable.

[user1@linuxhelp Desktop]$ export LC_ALL=C
[user1@linuxhelp Desktop]$ sort os.txt 
Redhat
arch
centos
debian
fedora
linuxmint
mageia
manjaro
opensuse
ubuntu

Here, it overrides the uppercase letter as the first one.

Use option ‘ -f‘ aka ‘ &ndash ignore-case‘ to get organized output.

[user1@linuxhelp Desktop]$ sort -f os.txt 
arch
centos
debian
fedora
linuxmint
mageia
manjaro
opensuse
Redhat
ubuntu

So it just sort and won’ t consider the lower and uppercase letters.

To run sort on two input file and merge

The following sort command is used to Create two text files and add some data and use cat command to check contents of the file.

[user1@linuxhelp Desktop]$ echo -e “ 1 redhat
3 centos
2 fedora”  >  file1.txt
[user1@linuxhelp Desktop]$ cat file1.txt
1 redhat
3 centos
2 fedora

Add 2nd file with some data

[user1@linuxhelp Desktop]$ echo -e “ 3 debian
2 mageia
1 ubuntu”  >  file2.txt
[user1@linuxhelp Desktop]$ cat file2.txt
3 debian
2 mageia
1 ubuntu

To merge output of both files

[user1@linuxhelp Desktop]$ join < (sort  file1.txt) < (sort file2.txt)
1 redhat ubuntu
2 fedora mageia
3 centos debian

Tag : sort
FAQ
Q
How to remove duplicate entries?
A
In order to avoid duplicate entries use "sort -u" followed by the file name.
Q
How to execute sort options for multiple files?
A
For multiple files use sort followed by the list of file names.
Q
How to override the default sorting preferences?
A
For overriding such feature use export LC_ALL=C and then execute sort command.
Q
How to get descending order sort format with files?
A
For descending order sorting you can use "sort -r followed by the file > file name.
Q
How to sort a file based on the number of columns?
A
For column based sorting you can use sort -nk2 (for 2nd column based) similarly assign it accordingly.