2014-01-23 65 views
2

有人可以解釋什麼sort -k 1,1sort -k 1,2呢?sort -k 1,2如何工作?

$ echo -e "9 3 5\n8 2 6\n7 4 1\n" 
9 3 5 
8 2 6 
7 4 1 

$ echo -e "9 3 5\n8 2 6\n7 4 1\n" | sort -k 2 -t " " -i 
8 2 6 
9 3 5 
7 4 1 

$ echo -e "9 3 5\n8 2 6\n7 4 1\n" | sort -k 1,1 -t " " -i 
7 4 1 
8 2 6 
9 3 5 

$ echo -e "9 3 5\n8 2 6\n7 4 1\n" | sort -k 1,2 -t " " -i 
7 4 1 
8 2 6 
9 3 5 

回答

5

man sort報價:

-k, --key=POS1[,POS2] 
      start a key at POS1 (origin 1), end it at POS2 (default end of 
      line). See POS syntax below 

所以:

-k 2 

會在關鍵的2開始,直到行的結束。

-k 1,1 

將開始在鍵1,在關鍵1.結束同樣地,對於-k 1,2


你的樣品輸入不示區別,但如果你稍微修改它,然後它可能會更清楚:

$ echo -e "9 3 5\n9 2 6\n7 4 1" | sort -k1,1 -t' ' 
7 4 1 
9 2 6 
9 3 5 
$ echo -e "9 3 5\n9 2 6\n7 4 1" | sort -k1,2 -t' ' 
7 4 1 
9 2 6 
9 3 5 
$ echo -e "9 3 5\n9 2 6\n7 4 1" | sort -k1,1 -t' ' -s 
7 4 1 
9 3 5 
9 2 6 

特別觀察的情況下1和3的情況下,輸出當排序是被應用到關鍵1.使用1甚至影響到-s選項以穩定排序:

-s, --stable 
      stabilize sort by disabling last-resort comparison 
0

注--debug選項到GNU因爲版本8.6(2010-10-15)

$ echo -e "9 3 5\n8 2 6\n7 4 1" | sort --debug -k 2 -t " " -i 
sort: using `en_US.utf8' sorting rules 
8 2 6 
___ 
_____ 
9 3 5 
___ 
_____ 
7 4 1 
___ 
_____ 
$ echo -e "9 3 5\n8 2 6\n7 4 1" | sort --debug -k 1,1 -t " " -i 
sort: using `en_US.utf8' sorting rules 
7 4 1 
_ 
_____ 
8 2 6 
_ 
_____ 
9 3 5 
_ 
_____ 
$ echo -e "9 3 5\n8 2 6\n7 4 1" | sort --debug -k 1,2 -t " " -i 
sort: using `en_US.utf8' sorting rules 
7 4 1 
___ 
_____ 
8 2 6 
___ 
_____ 
9 3 5 
___ 
_____ 

注排序中可用的最後_中的每一行示出了在整個行中使用的第二比較是那種最後的手段,可以使用-s選項來抑制