这是文本文件的示例:
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”选项来帮助确定排序中使用的行部分。