2013-04-21 177 views
2

如果我有几个制表符分隔栏这样一个文本文件:排序特定列

1 foo bar 
3 bar foo 

我将如何排序基于第二或第三列?

我读了类似于在视觉模式下使用:'<,'>!sort -n -k 2:sort /.*\%2v/,但这些命令似乎都不起作用。

+0

您正在使用什么版本的_vim_? “这些命令都不起作用”究竟意味着什么?是否有任何错误讯息? – chris 2013-04-22 01:27:33

回答

4

您可以使用内置的sort命令。

要按第二个制表符分隔列进行排序,可以使用:sort /[^\t]*\t/对第二列进行排序。 排序第三列则可以使用:sort /[^\t]*\t\{2}/

一般只列号(与第一列幸福指数0,即索引列)代替数减1

+0

甜。我只是使用相同的原则按域名对电子邮件地址列表进行排序。即':sort/[^ @] * @ /' – laher 2016-02-03 23:19:29

0

可悲的是,它似乎并不有可能与同一个文件内使用视觉块和/或一个命令,因为:ex是面向行,即CTRL-V + selection + :'<,'>sort也只是整个排序无论哪种方式。

一个有点冒险的“解决方案”将是选择任何你想要与视觉块排序,排序在另一个窗口,并将更改应用到您的原始文件。是这样的:

CTRL-V + selection + X + :tabnew + p + :sort + CTRL-Vģ$X + :q + `[P (对齐粘贴)

来源Barry Arthur - Sort Me A Column(来自#vim @ freenode的bairui)。

0

外部sort,通过:'<,'>!sort -k 2叫不工作。只有在给出-n标志(用于数字排序)但您要使用的列是非数字时,结果不符合预期。因此,要使用外部sort,请在您的示例中删除-n

备注::'<,'>sort /.*\%2v/确实为我工作。