2

如果我有一个包含多个制表符分隔列的文本文件,如下所示:

1  foo  bar
3  bar  foo

我将如何根据第二列或第三列进行排序?

我读到了类似 using :'<,'>!sort -n -k 2in visual mode or:sort /.*\%2v/的内容,但这些命令似乎都不起作用。

4

3 回答 3

4

您可以使用内置sort命令。

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

通常只需将数字替换为列号减 1。(即第一列为索引 0 的索引列)

于 2013-04-21T23:07:10.140 回答
0

外部sort调用 via:'<,'>!sort -k 2确实有效。仅当-n给出了标志(用于数字排序)但您要使用的列是非数字时,结果不符合预期。因此,要使用 external sort,只需-n放入您的示例即可。

备注::'<,'>sort /.*\%2v/对我有用。

于 2013-04-22T01:11:48.183 回答
0

可悲的是,似乎不可能在同一文件中使用可视块和/或使用一个命令,因为它:ex是逐行的,即Ctrl-v++会以任何一种方式对整行进行排序。selection:'<,'>sort

一个有点老套的“解决方案”是选择你想用视觉块排序的任何内容,在另一个窗口中对其进行排序并将更改应用于原始文件。像这样的东西:

Ctrl-v+ selection+ x+ :tabnew+ p+ :sort+ Ctrl-vG$x+ :q+ `[P(对齐粘贴)

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

于 2013-04-21T22:31:08.667 回答