Sort

mac:按列排序數據

  • October 23, 2020

我有一個長 csv 文件,其中包含以下格式的 2 列

RG_cne_1| 0.316571
RG_cne_10| 0.26924
RG_cne_100| 0.227538
RG_cne_1000| 0.385216
RG_cne_1001| 0.247508
RG_cne_1002| 0.496622
RG_cne_1003| 0.445685
RG_cne_1004| 0.53264
RG_cne_1005| 0.433687
RG_cne_1006| 0.295209
RG_cne_1007| 0.432938
RG_cne_1008| 0.368191
RG_cne_1009| 0.40916
RG_cne_101| 0.291027
RG_cne_1010| 0.389481
RG_cne_1011| 0.401816

我需要按照從 RG_cne_1 到最後一個文件(RG_cne_1011)的第一列的名稱對數據進行排序(更改行的順序),格式如下

RG_cne_1| its value
RG_cne_2| its value
RG_cne_3| its value
RG_cne_4| its value
RG_cne_5| its value
...
RG_cne_1011| its value

在我的 Mac 上,我嘗試使用

LC_ALL=C sort -t'|' -k1,1g

然而,這產生了不正確的數字排序(類似於上圖:1、10、100 等)

廣義數字排序 ( g) 仍然要求排序欄位以數字開頭,否則將回退到使用字元串比較。

以下假設我們希望在第 3 個_分隔的欄位上進行數字排序:

$ sort -t '_' -k 3,3n file
RG_cne_1| 0.316571
RG_cne_10| 0.26924
RG_cne_100| 0.227538
RG_cne_101| 0.291027
RG_cne_1000| 0.385216
RG_cne_1001| 0.247508
RG_cne_1002| 0.496622
RG_cne_1003| 0.445685
RG_cne_1004| 0.53264
RG_cne_1005| 0.433687
RG_cne_1006| 0.295209
RG_cne_1007| 0.432938
RG_cne_1008| 0.368191
RG_cne_1009| 0.40916
RG_cne_1010| 0.389481
RG_cne_1011| 0.401816

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