关于排序键的问题

关于排序键的问题

我想对文件进行排序,其中排序的键是第二列中的数字,从该列的第二个字符开始。例如:

4 31
5 a14
2 h11
1 x4
2 z3

所需的输出是:

4 31
2 z3
1 x4
2 h11
5 a14

这似乎sort -k是一种可行的方法,但它并不像我预期的那样有效。

k, --key=KEYDEF

通过键排序; KEYDEF 给出位置和类型

KEYDEF 是 F[.C][OPTS][,F[.C][OPTS]] 表示开始和停止位置,其中 F 是字段编号,C 是字段中的字符位置;两者都是原点 1,停止位置默认为线的末尾。如果 -t 和 -b 均无效,则字段中的字符从前面的空格的开头开始计数。 OPTS 是一个或多个单字母排序选项 [bdfgiMhnRrV],它会覆盖该键的全局排序选项。如果未给出键,则使用整行作为键。

我尝试这样做:

sort -k 2.2V file
4 31
5 a14
2 h11
1 x4
2 z3

如何以正确的方式做到这一点?

答案1

你遇到了这个:

字段中的字符从前面的空格的开头开始计数。

sort -k 2.3V file

将给出您想要的结果:分隔字段的空格是第二个字段的第一个字符。

或者,您可以添加b忽略前导空格的选项:

sort -k 2.2bV file

这使得键定义可以与字段之前的任意数量的空格一起使用。

相关内容