bash - 如何根据多个嵌入数字对文件路径进行排序?

标签 bash sorting

我运行了一个程序来生成具有不同参数的结果,R , CRP , 反射(reflect)在输出文件的目录名 中,全部命名为 results.txt .

例如,目录名params_R_7_C_16_RP_0 , 7是参数值 R , 16是参数值 C0是参数值 RP .

我想得到所有results.txt当前目录树中的文件,按 R 的嵌入值排序, CRP在他们的托管目录中。

我首先使用以下命令获取 results.txt我要解析的文件:

find ./ -name "results.txt"

输出是:

./params_R_11_C_9_RP_0/results.txt 
./params_R_7_C_9_RP_0/results.txt
./params_R_7_C_4_RP_0/results.txt
./params_R_11_C_16_RP_0/results.txt 
./params_R_9_C_4_RP_0/results.txt
./params_R_5_C_9_RP_0/results.txt 
./params_R_9_C_25_RP_0/results.txt 
./params_R_7_C_16_RP_0/results.txt 
./params_R_5_C_25_RP_0/results.txt 
./params_R_5_C_16_RP_0/results.txt 
./params_R_11_C_4_RP_0/results.txt
./params_R_9_C_16_RP_0/results.txt
./params_R_7_C_25_RP_0/results.txt
./params_R_11_C_25_RP_0/results.txt 
./params_R_5_C_4_RP_0/results.txt 
./params_R_9_C_9_RP_0/results.txt 

我尝试了以下排序命令:

find ./ -name "results.txt" | sort

这导致词法排序:

./params_R_11_C_16_RP_0/results.txt
./params_R_11_C_25_RP_0/results.txt
./params_R_11_C_4_RP_0/results.txt
./params_R_11_C_9_RP_0/results.txt
./params_R_5_C_16_RP_0/results.txt
./params_R_5_C_25_RP_0/results.txt
./params_R_5_C_4_RP_0/results.txt
./params_R_5_C_9_RP_0/results.txt
./params_R_7_C_16_RP_0/results.txt
./params_R_7_C_25_RP_0/results.txt
./params_R_7_C_4_RP_0/results.txt
./params_R_7_C_9_RP_0/results.txt
./params_R_9_C_16_RP_0/results.txt
./params_R_9_C_25_RP_0/results.txt
./params_R_9_C_4_RP_0/results.txt
./params_R_9_C_9_RP_0/results.txt

但我真正想要的是选择性数字排序:首先是R值,然后 C , 然后 RP :

./params_R_5_C_4_RP_0/results.txt
./params_R_5_C_9_RP_0/results.txt
./params_R_5_C_16_RP_0/results.txt
./params_R_5_C_25_RP_0/results.txt
./params_R_7_C_4_RP_0/results.txt
./params_R_7_C_9_RP_0/results.txt
./params_R_7_C_16_RP_0/results.txt
./params_R_7_C_25_RP_0/results.txt
./params_R_9_C_4_RP_0/results.txt
./params_R_9_C_9_RP_0/results.txt
./params_R_9_C_16_RP_0/results.txt
./params_R_9_C_25_RP_0/results.txt
...

我考虑过在生成路径列表时填充嵌入的数字(例如 params_R_005_C_004_RP_0),但这需要额外的处理步骤,我想避免。

能否直接实现想要的排序?

最佳答案

排序需要-V标志

find ./ -name "results.txt" | sort -V

关于bash - 如何根据多个嵌入数字对文件路径进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24196786/

相关文章:

bash - 问 : Permission denied when I source . bash_profile

bash - 如何重命名 bash 函数?

C++ 使用 std::sort 进行多维字符串数组

r - 使用 ggplot 对 y 轴上的数据进行排序

javascript - 按时间顺序对带有日期的多维数组进行排序的最快方法

sql - 如何在 SQL Server 中生成 id 以便轻松排序?

linux - cron 任务的 bash 脚本

linux - 确定另一个程序的工作目录

java - 使用 ArrayList <Integer> 对整数进行排序

linux - 放入 bash 脚本中时 sed 的行为不同