這是文字檔案的範例:
195.92.211.47:21029:400
195.92.211.48:21023:400
如何按第二列的最後 2 位數字對檔案的行進行排序?第二列始終為五位數字。
答案1
假設第二個:
- 分隔欄位總是包含五位數字:
$ sort -t ':' -k2.4,2n file
195.92.211.48:21023:400
195.92.211.47:21029:400
指示使用第二個字段,從字元 4 開始(就是這樣做的)到字段末尾作為排序鍵,並按該鍵(末尾的)-k2.4,2n
對輸入進行數字排序。要按數字排序sort
.4
n
所有的第二個字段,您會使用-k2,2n
.我們過去常-t ':'
說字段是用冒號分隔的。
如果您運行命令(此處--debug
同時顯示 GNUsort
和OpenBSD),您可以看到它使用正確的數字進行排序:sort
$ gsort --debug -t ':' -k2.4,2n file
gsort: text ordering performed using simple byte comparison
195.92.211.48:21023:400
__
_______________________
195.92.211.47:21029:400
__
_______________________
$ sort --debug -t ':' -k2.4,2n file
Memory to be used for sorting: 2139060224
sort_method=heapsort
; k1=<23>, k2=<29>; s1=<195.92.211.48:21023:400>, s2=<195.92.211.47:21029:400>; cmp1=-1
195.92.211.48:21023:400
195.92.211.47:21029:400
答案2
使用sort -t: -nk2.4
-t uses the delimiter :
-n for numerical sort
-k your key is the second column
關鍵定義在 中得到了很好的解釋info sort
。
'-k POS1[,POS2]'
'--key=POS1[,POS2]'
指定由 POS1 和 POS2 之間的行部分(或行尾,如果省略 POS2)組成的排序字段, 包括的。
每個 POS 的格式為“F[.C][OPTS]”,其中 F 是要使用的欄位編號,C 是從欄位開頭算起的第一個字元的編號。欄位和字元位置從 1 開始編號; POS2 中的字元位置為零表示該欄位的最後一個字元。如果 POS1 中省略“.C”,則預設為 1(欄位的開頭);如果從 POS2 中省略,則預設為 0(欄位末端)。 OPTS 是排序選項,允許根據不同的規則對各個鍵進行排序;詳細資訊請參見下文。鍵可以跨越多個字段。
範例:若要對第二個欄位進行排序,請使用“--key=2,2”(“-k 2,2”)。有關按鍵的更多註釋和更多範例,請參閱下文。另請參閱“--debug”選項來協助確定排序中使用的行部分。