1

Possible Duplicate:
List files sorted numerically

How can I sort this according to the number of last field? I tried with sort -t ' ' -k9,10n:

-rw-r--r-- 1 root   root    440 May 14 08:52 test.txt.6
-rw-r--r-- 1 root   root    470 May 14 08:52 test.txt.8
-rw-r--r-- 1 root   root   2.6K May 14 08:52 test.txt.14
-rw-r--r-- 1 root   root    449 May 14 08:52 test.txt.7
-rw-r--r-- 1 root   root    434 May 14 08:52 test.txt.13
-rw-r--r-- 1 root   root    554 May 14 08:52 test.txt.4
-rw-r--r-- 1 root   root    426 May 14 08:52 test.txt.12
-rw-r--r-- 1 root   root   1.6K May 14 08:52 test.txt.5
-rw-r--r-- 1 root   root   7.2K May 14 08:52 test.txt.11
-rw-r--r-- 1 root   root    444 May 14 08:52 test.txt.3
-rw-r--r-- 1 root   root    927 May 14 08:52 test.txt.9
-rw-r--r-- 1 root   root    681 May 14 08:52 test.txt.15
-rw-r--r-- 1 root   root    427 May 14 08:52 test.txt.2
-rw-r--r-- 1 root   root    458 May 14 08:52 test.txt.16
-rw-r--r-- 1 root   root   2.4K May 14 08:52 test.txt.10
-rw-r--r-- 1 root   root    423 May 14 08:52 test.txt.17
-rw-r--r-- 1 root   root    424 May 14 08:52 test.txt.1

3 Answers3

2

Well, part of the problem is that -t ' ' will not collapse the separators so your ninth column will be the 4-char sizes and empty on the three-chars. Leave it out and you get collapsed whitespace like you want. The other part of the problem is, as others have said, is that the fields are not numeric. Fortunately, they resemble version numbers closely enough you can use the version sort (-V) to order them. Further, if they are going to be contiguous (i.e. 1-17, not missing any), you can use the braces as I mentioned in the other thread you were directed to (test.txt.{1..17}).

ls -l | sort -Vk9

echo test.text.{1..17}
Kevin
  • 40,767
1

you can use the following command and you will get them sorted the way you want: ls -l -v

WAEL
  • 1,579
0

A common mistake using sort it to not to use the "-n" argument when sorting by numerical values.