可能的重复:
列出按数字排序的文件
如何根据最后一个字段的编号对其进行排序?我尝试过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
答案1
好吧,问题的一部分是-t ' '
不会折叠分隔符,因此您的第九列将是 4 个字符的大小,并且在三个字符上为空。把它去掉,你就会得到你想要的折叠空白。正如其他人所说,问题的另一部分是字段不是数字。幸运的是,它们与版本号非常相似,您可以使用版本排序 ( -V
) 对它们进行排序。此外,如果它们是连续的(即 1-17,不遗漏任何),您可以使用大括号,正如我在您定向到的其他线程中提到的那样 ( test.txt.{1..17}
)。
ls -l | sort -Vk9
echo test.text.{1..17}
答案2
您可以使用以下命令,您将按照您想要的方式对它们进行排序: ls-l-v
答案3
使用 sort 的一个常见错误是在按数值排序时不使用“-n”参数。