用制表符替换CSV中的LAST','吗?

时间:2018-10-11 21:08:13

标签: vi

在宽而大的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。这些值不是如上面显示的那样固定,因此我不能依靠数据或固定的列号。这取决于字段分隔符(,)。

感谢您提供的任何帮助。 干杯, 乔·怀特

1 个答案:

答案 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>表示原义的制表符)