我想请教您一些脚本的帮助。 我的文件在一个目录中,只有一个扩展名:
1_of_meany_files.ext
2_of_meany_files.ext
3_of_meany_key1_files.ext
5_of_meany_files.ext
6_key2_of_meany_files.ext
现在我正在尝试使用这些文件的列表构建file.txt,但按特定顺序:
3_of_meany_key1_files.ext
6_key2_of_meany_files.ext
1_of_meany_files.ext
2_of_meany_files.ext
5_of_meany_files.ext
我很感激你的帮助。 谢谢 马尔钦
== EDIT ==
嗨,谢谢你的帮助。 脚本工作正常。但是我有一件事有问题: 如果关键词里面有一个数字,那就完美了。 但关键词可以没有数字(S114或S_114) 然后这些脚本不起作用。我该怎么办? 一般情况我想对文件进行排序,并使用密钥将其放在列表顶部(S114或S_114)。 因此排序后的文件可能如下所示:
选项一
one_file_S114_text.ext
rest_of_files_1.ext
rest_of_files_2.ext
rest_of_files_3.ext
选项二
one_file_S_114_text.ext
rest_of_files_1.ext
rest_of_files_2.ext
rest_of_files_3.ext
在目录中只能有一个带密钥的文件,但密钥可以是S114或S_114
感谢您的时间 关于马辛
答案 0 :(得分:2)
这有点棘手,因为你想要最后没有密钥的文件,所以你不能只在awk命令中做print $2+0,$0
。但是,这个awk-sort-cut管道应该做你想做的事情:
$ printf "%s\n" * | awk -F'_key' '{print $2+0==0?1000000:$2+0,$0}'| sort -n | cut -d' ' -f 2-
3_of_meany_key1_files.ext
6_key2_of_meany_files.ext
1_of_meany_files.ext
2_of_meany_files.ext
5_of_meany_files.ext
答案 1 :(得分:2)
使用perl:
perl -e 'print"$_\n"for sort{($a=~/key(\d+)/?$1:1e+9)-($b=~/key(\d+)/?$1:1e+9)}<*>'