使用grep / gsub只查找第一个冒号

时间:2011-09-27 00:07:41

标签: regex r grep gsub

我有一个长文件,只写为一列 该列包含基因名称,后跟冒号(:),然后是microRNA片段的名称。 不幸的是,microRNA名称可能还包含冒号(:)。

我想用标签(\ t)替换 第一个冒号,然后使用write.table在R中生成两列。

以下是一个具有多个microRNA的基因名称的代表性样本:

CHD5:miR-329/362-3p:2
CHD5:miR-329/362-3p:1
CHD5:miR-30a/30a-5p/30b/30b-5p/30cde/384-5p
CHD5:miR-15/16/195/424/497
CHD5:miR-26ab/1297
CHD5:miR-17-5p/20/93.mr/106/519.d
CHD5:miR-130/301
CHD5:miR-19
CHD5:miR-204/211

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

也许使用sub代替gsub

答案 1 :(得分:3)

如果你有'inFile'并想要'outFile',这里有一个更完整的例子......

lines <- readLines('inFile')
lines <- sub(':', '\t', x)
writeLines(lines, 'outFile')

答案 2 :(得分:2)

如果x是您的列或向量:

sub(":", "\t", x)

请参阅?sub,其中包含

  

'sub'和'gsub'执行第一次和所有匹配的替换       分别

答案 3 :(得分:2)

如果您使用sed可以,则可以执行以下操作(假设您的数据位于名为data.txt的文件中)。

sed 's/\([^:]\):/\1 /' data.txt

\1之后的空格实际上是一个标签。要将它插入我的shell,我需要执行Ctrl-v,&lt; tab&gt;。

这是运行命令后的结果:

CHD5    miR-329/362-3p:2
CHD5    miR-329/362-3p:1
CHD5    miR-30a/30a-5p/30b/30b-5p/30cde/384-5p
CHD5    miR-15/16/195/424/497
CHD5    miR-26ab/1297
CHD5    miR-17-5p/20/93.mr/106/519.d
CHD5    miR-130/301
CHD5    miR-19
CHD5    miR-204/211