在宽而大的CSV表中,如何用vi中的选项卡替换LAST','? awk命令同样有用,但是我不太了解awk。 (我会在PERL中这样做,但我不想编写脚本)。
例如用制表符替换最后一个值之前的逗号。在该行的开头很容易做到,但在结尾却不容易。有什么想法吗?
chr9,5971307,…,2,2,2,2,2,0,5881595,6007901,KIAA2026,20605
chr9,5971313,…,0,0,0,0,0,0,5881595,6007901,KIAA2026,20605
chr9,5971416,…,2,2,2,2,2,0,5881595,6007901,KIAA2026,20605
注意:CSV值的数量>1000。这些值不是如上面显示的那样固定,因此我不能依靠数据或固定的列号。这取决于字段分隔符(,)。
感谢您提供的任何帮助。 干杯, 乔·怀特
答案 0 :(得分:0)
您可以使用substitute
命令执行此操作。
:%s/,\ze[^,]*$/\t
\ze
件将导致其后的所有内容(即[^,]*$
)都不会被替换,但仍需要匹配。所以这意味着:
:%s/
替换为每行... ,
逗号\ze
之后,(但不要替换此部分)[^,]*
没有逗号的任意数量的字符。$
然后是行尾/
with \t
标签。这实际上与
相同:%s/,\([^,]*\)$/\t\1
您也可以使用普通模式命令来执行此操作,但是如果行中的最后一个字符是逗号,则此操作将无效。
:%norm $F,r<C-v><tab>
(请注意,<C-v>
表示 ctrl-v ,<tab>
表示原义的制表符)