Linux - 按名称的一部分排序文件(无分隔符)

标签 linux bash sorting

我想得到一个排序的文件列表。文件具有以下命名约定:

DATENUMBER.txt(无空格)。

例如,2015-12-09 上的文件 3 如下所示:201512093.txt

lsversion sort 选项对我没有帮助:

ls -v:
201512183.txt
201512184.txt
201512188.txt
201512191.txt
201512195.txt
201512199.txt
2015121810.txt
2015121813.txt
2015121910.txt
2015121911.txt
2015121932.txt

sort -V, --key=1.[number] do not work too因为我有不同的文件名长度。

因为我在日期和数字之间没有分隔符,sort -t, -k也不行。

如您所见,我需要按文件名中的前 8 个符号对文件列表进行排序,然后按另一部分排序行

预期输出:

201512183.txt
201512184.txt
201512188.txt
2015121810.txt
2015121813.txt
201512191.txt
201512195.txt
201512199.txt
2015121910.txt
2015121911.txt
2015121932.txt

我该怎么做(有 )?谢谢。

最佳答案

这将进行排序:

sort -k1.1,1.8 -k1.9n

它定义了两个键,第一个是固定长度的 8 字符键(第一个字段,字符 1 到 8),第二个键是从第一个字符 9 开始(并延伸到末尾)的数字键线)。

数字排序使用它在键开头找到的任何数字,因此您不需要变得更复杂。但如果你想更精确,你可以告诉 sort 使用 . 来分隔字段,然后使用三个键:

sort -t. -k1.1,1.8 -k1.9,1n -k2

如果您的文件名具有不同的扩展名并且您希望扩展名影响排序,则您可能需要使用 POSIX 标准的 sort 实用程序。 GNU sort(在 Linux 上使用)似乎在数字排序中使用整个键,但 POSIX 标准建议数字排序键仅包含数字部分。

关于Linux - 按名称的一部分排序文件(无分隔符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725005/

相关文章:

javascript - 对对象数组进行排序?

arrays - 如何沿最内层维度对大量数组进行排序?

linux - 使用需要身份验证的 bash 下载页面

linux - 如何在 centos 中为守护进程生成核心转储?

linux - 分配给变量的 Bash 命令保持为空

linux - 比较 2 个文件时进行 Bash shell 脚本检查

arrays - 在 Swift3 中对数组进行排序

c++ - 在 Linux Ubuntu 中使用 C++ 过滤以太网数据包

linux - Apache Ant BINARY 下载是否缺少 BINARY 文件?

linux - bash命令从文件中删除两个 block 之间的内容