1

我想请你帮忙写一些脚本。我在一个目录中有一个扩展名的文件:

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

我将不胜感激。谢谢马尔辛

==编辑==

您好,感谢您的帮助。脚本工作正常。但是我有一件事有问题:如果关键字里面有一个数字,它就完美了。但是关键字可以没有数字(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

目录中只能有一个文件有key,但是key可以是S114或者S_114

感谢您的时间关注 Marcin

4

2 回答 2

2

这有点棘手,因为您希望文件最终没有密钥,所以您不能只print $2+0,$0在 awk 命令中执行。但是,这个 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
于 2013-09-21T12:19:05.563 回答
2

使用 perl:

perl -e 'print"$_\n"for sort{($a=~/key(\d+)/?$1:1e+9)-($b=~/key(\d+)/?$1:1e+9)}<*>'
于 2013-09-21T13:35:07.320 回答