Sort

排序命令 - 數字排序不適用於 csv

  • July 25, 2022

Linux 上的GNUsort在我的 csv 文件上沒有給出預期的結果。你能幫忙解決情況/問題嗎?

輸入文件

[nscruser]$ cat cemp1.txt
10,30
50,900
20,1050

目標我需要對上述文件的第一個欄位進行數字排序

[nscruser]$  sort -t',' -k1 -n cemp1.txt
10,30
50,900
20,1050

預期輸出但我希望輸出如下,因為我正在對第一列進行數字排序

10,30
20,1050
50,900

有人可以讓我知道為什麼會出現差異嗎?

查看手冊頁sort

-k, –key=KEYDEF 通過鍵排序;KEYDEF 給出位置和類型

KEYDEF 是 F

$$ .C $$$$ OPTS $$$$ ,F[.C $$$$ OPTS $$] 表示開始和停止位置,其中 F 是欄位編號,C 是欄位中的字元位置;兩者都是原點 1,停止位置預設為行尾。如果 -t 和 -b 均無效,則欄位中的字元從前一個空格的開頭開始計數。OPTS 是一個或多個單字母排序選項$$ bdfgiMhnRrV $$,它會覆蓋該鍵的全域排序選項。如果沒有給出鍵,則使用整行作為鍵。使用 –debug 來診斷不正確的密鑰使用。

首先,您可以--debug按照建議使用,

$ sort -t',' -k1 -n --debug cemp1.txt
sort: text ordering performed using ‘en_IE.UTF-8’ sorting rules
sort: key 1 is numeric and spans multiple fields
10,30
_____
_____
50,900
______
______
20,1050
_______
_______

這給了我們一個線索:“鍵 1 是數字並且跨越多個欄位”。

正如手冊頁所說,“停止位置預設為行尾”。所以你需要添加一個停止位置:

$ sort -t',' -k1,1 -n cemp1.txt
10,30
20,1050
50,900

引用自:https://unix.stackexchange.com/questions/711170