我有一个格式为的文本文件 -
b SN:2
d SN:5
f SN:10
g SN:11
h SN:15
i SA:3
j SN:1
k SN:4
我想按第二列排序,实际上是第二列中的数值。我试过了 -
$ sort -n -k2,2 file
$ sort -k2.4,2.5n file
但似乎没有任何作用。
答案1
因为你不使用-t
选项(或-b
与GNU 排序),因此必须从前导空格的开头开始计数。 POSIX 定义sort -k 扩展描述作为:
A field comprises a maximal sequence of non-separating characters and, in
the absence of option -t, any preceding field separator
所以你必须使用:
$ sort -nk2.7 file
j SN:1
b SN:2
i SA:3
k SN:4
d SN:5
f SN:10
g SN:11
h SN:15
但您可以用作:
字段分隔符,然后按第二个字段对数字进行排序:
$ sort -t':' -nk2 file
j SN:1
b SN:2
i SA:3
k SN:4
d SN:5
f SN:10
g SN:11
h SN:15
答案2
只为你的情况man sort
如果 -t 和 -b 均无效,则对字段中的字符进行计数 从前面的空格开始。
所以
sort -k2.7n file
会做工作
暗示!
如果您想从行开始计数,可以使用-t
接受不存在的字符来将该行视为一个字段:
sort -t% -k1.8n file