Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 基于文件名对文件进行排序_Linux_Bash - Fatal编程技术网

Linux 基于文件名对文件进行排序

Linux 基于文件名对文件进行排序,linux,bash,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 在一位数前加一

我正在尝试根据文件名对一些文件(而不是其中的内容)进行排序

我已经尝试了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

在一位数前加一个零,排序很容易。 这可以通过sed实现

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

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

使用密钥替换进行自定义排序

$ 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

通过管道使用ls和sort命令
例如

ls-l | sort-t-k2,2n

这几乎是可能的。。。排序使用ASCII,当列中同时包含数字值和字符值时,字符优先<代码>排序-t-k2,2n但是如果我直接使用sort,它会正确地对文件中的内容进行排序。我只想根据文件名按顺序列出文件,但不想列出文件中的内容,因此将
ls
的输出导入
排序
。。。