如果我有一个包含多个制表符分隔列的文本文件,如下所示:
1 foo bar
3 bar foo
我将如何根据第二列或第三列进行排序?
我读到了类似 using :'<,'>!sort -n -k 2
in visual mode or:sort /.*\%2v/
的内容,但这些命令似乎都不起作用。
您可以使用内置sort
命令。
要按第二个制表符分隔的列排序,您可以使用:sort /[^\t]*\t/
对第二列进行排序。要对第三列进行排序,您可以使用:sort /[^\t]*\t\{2}/
通常只需将数字替换为列号减 1。(即第一列为索引 0 的索引列)
外部sort
调用 via:'<,'>!sort -k 2
确实有效。仅当-n
给出了标志(用于数字排序)但您要使用的列是非数字时,结果不符合预期。因此,要使用 external sort
,只需-n
放入您的示例即可。
备注:也:'<,'>sort /.*\%2v/
对我有用。
可悲的是,似乎不可能在同一文件中使用可视块和/或使用一个命令,因为它: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)。