在unix中按数字排序

在unix中按数字排序

我对文件排序有疑问,我的问题与其他关于排序的问题不同我有一个包含数百个文件的文件夹,如下所示

anacovaux_1052_summary_betai.out
anacovaux_1052_summary_Pdelta.out
anacovaux_1052_summary_pij.out
anacovaux_1053_DIC.out
anacovaux_1053_summary_betai.out
anacovaux_1053_summary_beta_params.out
anacovaux_1048_DIC.out
anacovaux_1048_summary_betai.out
anacovaux_1043_summary_pi_xtx.out
anacovaux_1058_DIC.out

我想知道有什么方法可以对它们进行数字排序吗?我的意思是得到这样的东西:

anacovaux_1043_summary_pi_xtx.out
anacovaux_1048_DIC.out
anacovaux_1048_summary_betai.out
anacovaux_1052_summary_betai.out
anacovaux_1052_summary_Pdelta.out
anacovaux_1052_summary_pij.out
anacovaux_1053_DIC.out
anacovaux_1053_summary_betai.out
anacovaux_1053_summary_beta_params.out
anacovaux_1058_DIC.out

答案1

使用lsGNU coreutils(大多数 Linux 系统上默认):

$ ls -v -1

这将在一列 ( -1) 中列出文件名,并使用文件名中数字的自然排序顺序进行排序(“版本排序”,-v)。这假设所有文件名都具有相同的前缀字符串,直到实际的数字(anacovaux_例如)。

对于没有 GNU 的系统ls

$ print '%s\n' * | sort -t '_' -k2,2n

_这将对名称中第一个字符之后的数字上的名称进行排序。再次,它假设文件名前缀是不变的(这个解决方案完全忽略直到第一个的前缀_)。

答案2

如果您想按自定义排序顺序列出文件夹中的文件:

ls -1 yourfolder | sort -t'_' -k2,2n

相关内容