Bash 排序类似于 Windows 的“自然排序顺序”

Posted

技术标签:

【中文标题】Bash 排序类似于 Windows 的“自然排序顺序”【英文标题】:Bash Sort like Windows 'natural sort order' 【发布时间】:2014-05-21 19:10:22 【问题描述】:

我有一堆要附加在一起的 PDF,我有一个程序,给定文件列表,将它们附加到一个 PDF 中。

我遇到的问题是将文件名通过管道传送到 sort 不会产生所需的顺序。 sort 的标志也没有给我我想要的东西。我在下面有一些例子:

所需的排序顺序:

test1.pdf
test2.pdf
test10.pdf

使用sort实现排序顺序:

test1.pdf
test10.pdf
test2.pdf

有关我想要的排序顺序的详细信息,请参阅:

http://msdn.microsoft.com/en-us/library/bb759947.aspx

【问题讨论】:

【参考方案1】:

假设您使用的是 GNU 排序,请使用-V 选项:

   -V, --version-sort
          natural sort of (version) numbers within text

对于您的输入,它会产生:

test1.pdf
test2.pdf
test10.pdf

【讨论】:

如果你使用ls,你可以使用ls -1v,它给了你这个。 @LaughDonor 谢谢。我碰巧很少使用ls 不幸的是,-V 不适用于我拥有的文件名。它们的形式为:sec2_pages12-20、sec2_pages21-30 等......不过 ls 选项完全有效,谢谢! 很遗憾 BusyBox sort(嵌入式 Linux 上的典型)不支持 -V 选项。 对于后代,自然排序不包括在 ls 中,它也是 FreeBSD 或 OSX 的一部分。 (我知道,这个问题是关于 cygwin..)

以上是关于Bash 排序类似于 Windows 的“自然排序顺序”的主要内容,如果未能解决你的问题,请参考以下文章

如何像在 Windows 资源管理器中一样在 Delphi 中获取排序顺序?

TreeSet ------自然排序与定制排序(比较器)

TreeSet之定制排序和自然排序

自然排序和全排序的区别

自然排序算法

自然排序与定制排序