perl - 在可变长度文件名中使用 bash 排序命令

标签 perl bash sorting command-line awk

我正在尝试对 ls 命令输出的一系列文件进行数字排序,这些文件与 ABCDE1234A1789.RST.txtABCDE12345A1789.RST.txt 模式匹配'789' 字段。

在上面的示例模式中,ABCDE 对所有文件都是相同的,123412345 是不同的数字,但总是 4或 5 位数字的长度。 A1 对所有文件的长度都相同,但值可能会有所不同,因此很遗憾,它不能用作分隔符。第一个 . 之后的所有内容对于所有文件都是相同的。像这样的东西:

ls -l *.RST.txt | sort -k +9.13 | awk '{print $9} ' > file-list.txt

将匹配较短的文件名,但不会匹配较长的文件名,因为我要排序的字段之前的字符长度可变。

有没有一种方法可以完成对所有文件的排序,而无需首先填充较短的文件以使它们的长度相同?

最佳答案

Perl 助你一臂之力!

perl -e 'print "$_\n" for sort { substr($a, -11, 3) cmp substr($b, -11, 3) } glob "*.RST.txt"'

如果您的 perl 更新(5.10 或更高版本),您可以将其缩短为

perl -E 'say for sort { substr($a, -11, 3) cmp substr($b, -11, 3) } glob "*.RST.txt"'

关于perl - 在可变长度文件名中使用 bash 排序命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623364/

相关文章:

perl - 这个 Perl foreach 是做什么的?

arrays - PERL : How to create table from an array?

linux - 使用 Bash 从文本文件创建用户

bash - 检查是否存在多个文件——使用参数的 Unix 脚本

bash - 从 bash case 语句中获取通配符值

perl - 将 Modperl 配置转换为 Plack - 按文件扩展名运行不同的处理程序

database - 是否有带数据库逆向工程的 Perl ORM?

c++ - 如何为第二个值 "double"订购 set< pair< pair<int, int>, double >> ?

c# - 为什么这些快速排序算法不能完全工作?

php - 数组大小写限制