列表文件是特定的命令linux

时间:2013-09-21 11:40:27

标签: linux bash file-listing

我想请教您一些脚本的帮助。 我的文件在一个目录中,只有一个扩展名:

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

感谢您的时间 关于马辛

2 个答案:

答案 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)}<*>'