sort -t' ' -k1,1n -k2,2n
和有什么区别sort -t' ' -k1,2n
?
你能举例子吗?
我试过了:
logan@logan-mainPC:~/my-test/learn-sort$ cat myage
my age 1
my age 100
my age 2
my age 200
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,3
my age 1
my age 100
my age 2
my age 200
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,2 -k3,3
my age 1
my age 100
my age 2
my age 200
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,2 -k3,3n
my age 1
my age 2
my age 100
my age 200
我认为sort -k2,3
对“年龄 1”、“年龄 100”等进行排序,然后sort -k2,2 -k3,3
对“年龄”、“年龄”等进行排序,然后对“1”、“100”等进行排序。由于它们都将列视为字符串,因此它们会产生相同的结果。
但sort -k2,2 -k3,3n
由于它将第 3 列视为数字,因此产生了不同的结果。
但是之后:
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,3n
my age 1
my age 100
my age 2
my age 200
这很奇怪。发现原因是第 2 列不是数字。
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -k2,3n
sort: using ‘en_AU.UTF-8’ sorting rules
sort: key 1 is numeric and spans multiple fields
my age 1
^ no match for key
________
my age 100
^ no match for key
__________
my age 2
^ no match for key
________
my age 200
^ no match for key
__________
谢谢。
答案1
我可以通过旗帜看到正在发生的事情--debug
。
sort -k2,3
确实对‘年龄 1’、‘年龄 100’进行排序……
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -t' ' -k2,3
sort: using ‘en_AU.UTF-8’ sorting rules
my age 1
_____
________
my age 100
_______
__________
my age 2
_____
________
my age 200
_______
__________
sort -k2,2 -k3,3
按“年龄”排序,...然后按“1”,“100”,...
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -t' ' -k2,2 -k3,3
sort: using ‘en_AU.UTF-8’ sorting rules
my age 1
___
_
________
my age 100
___
___
__________
my age 2
___
_
________
my age 200
___
___
__________
最后
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -t' ' -k2,2 -k3,3n
sort: using ‘en_AU.UTF-8’ sorting rules
my age 1
___
_
________
my age 2
___
_
________
my age 100
___
___
__________
my age 200
___
___
__________
将第三列视为数字。