在两个垂直列上排序

在两个垂直列上排序

我有一个文件,我想从第 n 列(数字)排序 - 而不是第 n 个字段。该文件的示意图如下:

1 Here are four words       9 8 5 
2 Here's two                7 2 6
3 One 2 3                  10 3 7
4 Guess how many are here   9 4 8
123456789012345678901234567890123

(为了清楚起见,最后一行只是一个计数器)。 stackexchange 的好心人告诉我,我需要类似的东西sort -k1.27几乎做我想做的事。

然而,如果最初存在平局(如上面的第 1 行和第 4 行;均为“9”),则排序会回退到字段的开头,在这种情况下将第 1 行排在第 4 行之前(因为“1”位于“4”之前) ”);而我需要的是一种开始在字段 1.27(即,将“9 4”排在“9 8”之前的字段)。

我已经尝试过sort -g -k1.27,1.34[和sort -g -k1.27,34] 但额外的参数没有明显的效果......有什么想法吗?

答案1

您可以定义多个排序键:

sort -k1.27n -k1.30n

对于关系,后备方法是对整行进行词法比较。

sort -k 1.27,1.34将定义一个键,该键由第一个字段的第 27 个字符和第 34 个字符之间的行部分组成。然而,对于-g,这表明sort将该键视为数字,因此第一个非数字之后的任何内容都将被忽略。

请注意,使用 时-k1.27,键被定义为从第一个字段的第 27 个字符开始并在行尾结束。对于n,仅考虑初始数字部分。

相关内容