我有一个csv文件,其中包含大约1000个带有值的字段,标题如下所示:
v1,v2,v3,v4,v5....v1000
我想提取最后一列,即v1000及其值。
我试过%s/,[^,]*$//
,但结果与我的预期完全相反,有没有办法在VI中反转这个表达式?
我知道可以使用 awk 作为awk -F "," '{print $NF}' myfile.csv
来完成,但我希望在VI中使用正则表达式来实现,请注意我有VI并且没有VIM和在UNIX上工作,所以我也不能做视觉模式技巧。
非常感谢,非常感谢任何帮助。
答案 0 :(得分:3)
你不只是想要
%s/.*,\s*//
.*,
匹配最后一个逗号的所有内容,\s*
可以删除空格。
答案 1 :(得分:2)
您已经接受了答案,顺便说一句,您仍然可以在awk
或VI
中使用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