使用VI提取Last列

时间:2014-01-17 04:37:23

标签: regex unix vim awk vi

我有一个csv文件,其中包含大约1000个带有值的字段,标题如下所示:

v1,v2,v3,v4,v5....v1000

我想提取最后一列,即v1000及其值。

我试过%s/,[^,]*$//,但结果与我的预期完全相反,有没有办法在VI中反转这个表达式?

我知道可以使用 awk 作为awk -F "," '{print $NF}' myfile.csv来完成,但我希望在VI中使用正则表达式来实现,请注意我有VI并且没有VIM和在UNIX上工作,所以我也不能做视觉模式技巧。

非常感谢,非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

你不只是想要

%s/.*,\s*//

.*,匹配最后一个逗号的所有内容,\s*可以删除空格。

答案 1 :(得分:2)

您已经接受了答案,顺便说一句,您仍然可以在awkVI中使用VIM或其他不错的UNIX工具。下面的技术调用通过外部命令:!{cmd}

来操作缓冲区的内容

作为演示,让我们使用sort命令重新排列CSV文件中的记录:

first,last,email
john,smith,john@example.com
jane,doe,jane@example.com

:2,$!sort -t',' -k2

-k2标志将按第二个字段对记录进行排序。

使用awk提取最后一列就像以下一样简单:

:%!awk -F "," '{print $NF}'

答案 2 :(得分:2)

别忘了剪!

:%!cut -d , -f 6

其中6是最后一个字段的编号。

或者,如果您不想计算字段数:

:%!rev | cut -d , -f 1 | rev