如果我的文本文件包含多个以制表符分隔的列,请执行以下操作:
1 foo bar
3 bar foo
我如何根据第二列或第三列进行排序?
我在可视模式或:'<,'>!sort -n -k 2
中阅读过使用:sort /.*\%2v/
的内容,但这些命令似乎都不起作用。
答案 0 :(得分:4)
您可以使用内置的sort
命令。
要按第二个制表符分隔列排序,您可以使用:sort /[^\t]*\t/
对第二列进行排序。
要对第三列进行排序,您可以使用:sort /[^\t]*\t\{2}/
通常只需用列号减1替换数字。(即第一列为索引0的索引列)
答案 1 :(得分:0)
可悲的是,在同一个文件和/或一个命令中使用可视块似乎不可能,因为:ex
是行式的,即 Ctrl-v + selection
+ :'<,'>sort
只会对整行进行排序。
有点hacky“解决方案”是选择您想要使用可视块进行排序的任何内容,在另一个窗口中对其进行排序并将更改应用于原始文件。像这样:
Ctrl-v + selection
+ x + :tabnew
+ p + :sort
+ Ctrl-v G $ x + :q
+ `[P (对齐粘贴)
来源:Barry Arthur - Sort Me A Column(来自#vim @ freenode的bairui)。
答案 2 :(得分:0)
通过sort
调用的外部:'<,'>!sort -k 2
确实有效。仅当给出-n
标志(用于数字排序)但您要使用的列是非数字时,结果不符合预期。因此,要使用外部sort
,只需在示例中删除-n
。
备注:同样:'<,'>sort /.*\%2v/
对我有用。