多字段和数字排序

4

文件列表:

sysbench-size-256M-mode-rndrd-threads-1
sysbench-size-256M-mode-rndrd-threads-16
sysbench-size-256M-mode-rndrd-threads-4
sysbench-size-256M-mode-rndrd-threads-8
sysbench-size-256M-mode-rndrw-threads-1
sysbench-size-256M-mode-rndrw-threads-16
sysbench-size-256M-mode-rndrw-threads-4
sysbench-size-256M-mode-rndrw-threads-8
sysbench-size-256M-mode-rndwr-threads-1
sysbench-size-256M-mode-rndwr-threads-16
sysbench-size-256M-mode-rndwr-threads-4
sysbench-size-256M-mode-rndwr-threads-8
sysbench-size-256M-mode-seqrd-threads-1
sysbench-size-256M-mode-seqrd-threads-16
sysbench-size-256M-mode-seqrd-threads-4
sysbench-size-256M-mode-seqrd-threads-8
sysbench-size-256M-mode-seqwr-threads-1
sysbench-size-256M-mode-seqwr-threads-16
sysbench-size-256M-mode-seqwr-threads-4
sysbench-size-256M-mode-seqwr-threads-8

我希望按照模式(rndrd, rndwr等)和数字对它们进行排序:
sysbench-size-256M-mode-rndrd-threads-1
sysbench-size-256M-mode-rndrd-threads-4
sysbench-size-256M-mode-rndrd-threads-8
sysbench-size-256M-mode-rndrd-threads-16
sysbench-size-256M-mode-rndrw-threads-1
sysbench-size-256M-mode-rndrw-threads-4
sysbench-size-256M-mode-rndrw-threads-8
sysbench-size-256M-mode-rndrw-threads-16
....

我尝试了以下循环,但它是按数字排序的,而我需要像1、4、8、16这样的序列:
$ for f in $(ls -1A); do echo $f; done | sort -t '-' -k 7n

编辑:

请注意,数字排序(-n)按数字排序(1、1、1、1、4、4、4、4...),但我需要像1、4、8、16、1、4、8、16...这样的序列。

2个回答

5

按更多列排序:

sort -t- -k5,5 -k7n

主要排序按照第5列(而不是其余的,这就是为什么使用5,5),第二排序按照第7列中的数字进行。


该命令被接受,但似乎默默忽略了 n(使用 GNU sort 8.20)。 - msw

4

当通过管道输出时,for循环和-1参数对于ls命令是完全不必要的。这会导致

ls -A | sort -t- -k 5,5 -k 7,7n

第一个关键字从第5列开始,到第5列结束,第二个关键字从第7列开始,到第7列结束,是数字类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接