如何按数字、字母和标点符号混合的列对文件进行排序?

如何按数字、字母和标点符号混合的列对文件进行排序?

我有一个格式为的文本文件 -

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选项(或-bGNU 排序),因此必须从前导空格的开头开始计数。 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

相关内容