Sort
sort -k1,2 是否等同於 sort -k1,1 -k2,2?
我正在試驗 GNU 排序和 LC_COLLATE=“en_US.UTF-8”。我有一個名為“測試”的文件:
1,0 1 10 2 1,0 3 10 4
與
sort -k1,2
simple 一樣sort test
,順序不會改變:$ sort -k1,2 test 1,0 1 10 2 1,0 3 10 4
所以,sort 認為 ‘1,0’ 等於 ‘10’ 可能是由於 LC_COLLATE 的一些怪癖(跳過標點符號?)
現在,當我使用 時
sort -k1,1 -k2,2
,它給了我一個不同的順序:$ sort -k1,1 -k2,2 test 10 2 10 4 1,0 1 1,0 3
突然排序不再認為'10’與'1,0’相同。
發生了什麼?為什麼在這種情況下不
sort -k1,1 -k2,2
等於?sort -k1,2
真的應該等價嗎?還是我誤解了手冊頁?(我試過 coreutils 的 8.22 和 8.29 版本,都有這個行為)
-k1,2
意思是“對所有行進行排序,同時比較從 1 到 2 的所有欄位的內容”;所以“1,0 1”與“10 2”等進行比較。
-k1,1 -k2,2
意思是“對所有行進行排序,比較欄位 1 的內容,當欄位 1 中的兩行內容相同時,比較欄位 2 的內容”;所以“1,0”與“10”比較,然後“2”與“4”等。那麼在這兩種情況下會發生什麼,歸結為整理,特別是加權。數字通常比標點和間距具有更高的權重。比較“1,0 1”和“10 2”時,由於數字不同,逗號導致的差異被忽略。比較“1,0”和“10”時,唯一的區別是逗號,所以不再忽略。有關詳細資訊,請參閱ISO 14651。
您可以設置
LC_COLLATE=C
為僅基於字元值進行排序,沒有權重。你的例子都導致1,0 1 1,0 3 10 2 10 4
當使用“C”語言環境時。