sort -n places 10 before 9

Viewed 118

I am trying to sort the below numbers but always its getting sorted 10 before 9.

$ cat disks
1I:1:1
1I:1:3
1I:1:2
1I:1:4
2I:1:5
2I:1:6
2I:1:7
2I:1:8
3I:1:9
3I:1:10
3I:1:12
3I:1:11

After sorting using sort -n its coming as below.

$ sort -n -o sorted /tmp/disks
$ cat sorted
1I:1:1
1I:1:2
1I:1:3
1I:1:4
2I:1:5
2I:1:5
2I:1:7
2I:1:8
3I:1:10
3I:1:11
3I:1:12
3I:1:9    ---> wrong sort

Please let me know which sort option can do this properly ?

3 Answers

Try this

sort -n -t: -k3 file.txt -o out.txt

You can use version sort if your sort supports this option:

sort -V -o sorted /tmp/disks

The additional --stable option preserves ordering should you happen to have duplicates in column 3.

$ sort -t: -k3n --stable -o sorted /tmp/disks
$ cat sorted
1I:1:1
1I:1:2
1I:1:3
1I:1:4
2I:1:5
2I:1:6
2I:1:7
2I:1:8
3I:1:9
3I:1:10
3I:1:11
3I:1:12
$ 
Related