我运行了一个程序来生成包含不同参数的结果,R
,C
和RP
,反映在输出文件的目录名中,全部都是results.txt
。
例如,在目录名params_R_7_C_16_RP_0
中,7
是参数R
的值,16
是参数C
和{{的值1}}是参数0
的值。
我希望获取当前目录树中的所有RP
个文件,并按其托管目录中的results.txt
,R
和C
的嵌入值进行排序。
我首先使用以下命令获取我要解析的RP
文件:
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
导致 lexical 排序:
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
...
),但这需要一个额外的处理步骤,我想避免这样做。
可以直接实现所需的分类吗?
答案 0 :(得分:6)
-V
sort
标记
find ./ -name "results.txt" | sort -V
答案 1 :(得分:5)
如果您使用 GNU sort
(最近版本足够多)@Fabricator's answer,则基于GNU sort
' s {{1} }选项,是迄今为止最简单的解决方案。
否则,请尝试此符合POSIX标准的解决方案:
-V
find . -name 'results.txt' | sort -n -t _ -k3,3 -k5,5 -k 7,7
指定数字排序-n
将输入行拆分为基于分隔符char的字段。 -t _
_
首先根据字段3,然后是字段5,然后是字段7对输入进行排序,对应-k3,3 -k5,5 -k 7,7
,R
和C
值。RP
- 例如,-k
- 会导致从字段3 中通过剩余部分对进行排序)。答案 2 :(得分:0)
尝试find ./ -name "results.txt" | sort -k 3 -t _ -n -k 5 -n