如何按2个不同的列排序?

时间:2013-07-16 09:44:47

标签: sorting vim multiple-columns

我想按两个不同的列对文本进行排序:

aaa5aaaaa
aaa3azaba
aaa4aaaaa
aaa3abaza

第一种必须仅在第4列,如果有相同的数字p.e.在上面的示例'3'中,第二个排序必须在第8列,如果仍然有相同的字符,则下一列必须是9等。

我认为这将是解决方案:

%sort i /\%4v\|\%8v/

但它不起作用。

输出:

aaa3abaza
aaa3azaba
aaa4aaaaa
aaa5aaaaa

预期产出:

aaa3azaba
aaa3abaza
aaa4aaaaa
aaa5aaaaa

2 个答案:

答案 0 :(得分:3)

这是你的尝试出了什么问题:

  • 内置/pattern/的{​​{1}}参数指定跳过的文字;您显然正在尝试匹配某些列。
  • :sort原子零宽度,因此您可能需要附加一个\%v以使其与该角色匹配(如果这可能会有效点)。
  • 我认为没有办法用内置的.指定多个搜索键(即你的角色位置4和8)。

如果您安装了 GNU sort (即Linux系统或通过Cygwin),您可以使用以下外部命令:

:sort

这指定两个字符列4和8作为第一个字段(:%!sort -k1.4,1.4 -k1.8,1.8 )的偏移量作为排序键。

答案 1 :(得分:2)

这一行:

sor /\%7v/|sor n /\%3v/

适用于您的示例。

它进行两次排序,首先按col8排序,然后按col4排序(作为数字)。