对两列进行排序

对两列进行排序

我正在尝试使用排序命令(5.97)对一列数据进行排序,然后再对另一列数据进行排序。

现在,我正在做:

 > ls test/2/*.jpg | sort -t- -k1 -g -s
test/2/0-0.jpg
test/2/0-10.jpg
test/2/0-1.jpg
test/2/0-2.jpg
test/2/0-3.jpg
test/2/0-4.jpg
test/2/0-5.jpg
test/2/0-6.jpg
test/2/0-7.jpg
test/2/0-8.jpg
test/2/0-9.jpg
test/2/1-0.jpg
test/2/1-10.jpg
test/2/1-1.jpg
test/2/1-2.jpg
test/2/1-3.jpg
test/2/1-4.jpg
test/2/1-5.jpg
test/2/1-6.jpg
test/2/1-7.jpg
test/2/1-8.jpg
test/2/1-9.jpg
test/2/2-0.jpg
test/2/2-10.jpg
test/2/2-1.jpg
test/2/2-2.jpg
test/2/2-3.jpg
test/2/2-4.jpg
test/2/2-5.jpg
test/2/2-6.jpg
test/2/2-7.jpg
test/2/2-8.jpg
test/2/2-9.jpg

但如您所见,两位数字的位置不对。有没有办法通过 sort 来解决这个问题?

答案1

在“-k1”后添加“-k2”。即

ls test/2/*.jpg | sort -t- -k1 -k2 -g -s   (or sort -t- -n -k1 -k2)

如果发生冲突,它将使用第二个字段 (-k2) 来解决,并且(嗯,我使用)-n 将它们视为数字。如果您要切换顺序并输入 -k2 -k1,它将按文件名中的第二个数字排序,并且仅在发生冲突时才使用第一个数字。

答案2

嘿,它没有排序的原因是,sort 命令无法识别每行中的任何数字。它将其视为字符串。尝试运行相同的命令,但删除后缀 .jpg。您将获得您想要的顺序。请参阅,http://www.softpanorama.org/Tools/sort.shtml。在此链接中阅读订购选项部分(-n 选项)。希望这能解决您的问题。

相关内容