根据文件名对文件进行排序

时间:2019-02-14 16:28:52

标签: linux bash

我正在尝试根据文件名对某些文件(而不是内部内容)进行排序

我已经尝试过ls -v,但是只能根据数字对文件进行排序 我正在尝试排序

abc.adult.fasta
abc.1.1.fasta
abc.14.3.fasta
abc.3.2.fasta

数字是动物的年龄,因此成年动物应排在最后。

ls -v

结果应首先基于其实际数值,然后基于字母顺序。作为列表

abc.1.1.fasta
abc.3.2.fasta
abc.14.3.fasta
abc.adult.fasta

3 个答案:

答案 0 :(得分:1)

在一个数字前面加一个零,排序很容易。 可以使用sed完成此操作。

ls | sed -E 's/\.([0-9])\./\.0\1\./g' | sort | sed -E 's/\.0([0-9])\./\.\1\./g'

第一个sed在一个数字前添加一个零,而第二个sed将其删除。

答案 1 :(得分:0)

使用密钥替换的自定义排序

$ ls -1 | sed 's/\.adult\./.99./' | sort -V | sed 's/\.99\./.adult./'

abc.1.1.fasta
abc.3.2.fasta
abc.14.3.fasta
abc.adult.fasta

答案 2 :(得分:0)

使用ls并通过管道排序命令。
例如
ls -l |排序-t。 -k2,2n