Unix 按多列排序

giu*_*lio 4 command-line sort

我无法理解 Unix 排序。考虑以下文件(制表符分隔)

aa  ~ a1
aa  B
b   A
b   ~ e
bb  B
bb  ~ B
Run Code Online (Sandbox Code Playgroud)

调用时:

cat tmp2 | sort -t $'\t' -k1,2
Run Code Online (Sandbox Code Playgroud)

我得到

aa  ~ a1
aa  B
b   A
bb  B
bb  ~ B
b   ~ e
Run Code Online (Sandbox Code Playgroud)

据我了解, -t $'\t' 表示将分隔符视为制表符而不是空格, -k1,2 表示按第一列排序,如果两行具有相同的第一列,然后由第二个。但在那种情况下,我的最后一个 'b' 不应该出现在第四行吗?

Sté*_*las 9

不,-k1,2表示对从第一个字段的开头开始到第二个字段的结尾结束的行部分进行排序。

要对第一个字段进行排序,然后在第二个字段上排序,它是:

sort -k1,1 -k2,2
Run Code Online (Sandbox Code Playgroud)