2

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

aaa5aaaaa
aaa3azaba
aaa4aaaaa
aaa3abaza

第一次排序必须仅在第 4 列,如果在上面的示例“3”中有相同的数字 pe,则第二次排序必须在第 8 列,如果仍然有相同的字符,则下一列必须是 9,依此类推。

我认为这将是解决方案:

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

但它不起作用。

输出:

aaa3abaza
aaa3azaba
aaa4aaaaa
aaa5aaaaa

预期输出:

aaa3azaba
aaa3abaza
aaa4aaaaa
aaa5aaaaa
4

2 回答 2

3

这是您的尝试有什么问题:

  • /pattern/内置参数指定要跳过:sort文本;您显然是在尝试匹配某些列。
  • \%v原子是zero-width ,因此您可能需要附加 a.以使其与字符匹配(如果尽管第一点仍然有效)。
  • 我认为根本没有办法使用内置指定多个搜索键(即您的字符位置 4 和 8):sort

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

:%!sort -k1.4,1.4 -k1.8,1.8

这将两个字符列 4 和 8 指定为1.作为排序键的第一个字段 ( ) 的偏移量。

于 2013-07-16T10:04:37.363 回答
2

这一行:

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

适用于您的示例。

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

于 2013-07-16T10:55:52.237 回答