我想按两个不同的列对文本进行排序:
aaa5aaaaa
aaa3azaba
aaa4aaaaa
aaa3abaza
第一种必须仅在第4列,如果有相同的数字p.e.在上面的示例'3'中,第二个排序必须在第8列,如果仍然有相同的字符,则下一列必须是9等。
我认为这将是解决方案:
%sort i /\%4v\|\%8v/
但它不起作用。
输出:
aaa3abaza
aaa3azaba
aaa4aaaaa
aaa5aaaaa
预期产出:
aaa3azaba
aaa3abaza
aaa4aaaaa
aaa5aaaaa
答案 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排序(作为数字)。