【问题标题】:Using grep/gsub To Find First Colon Only使用 grep/gsub 仅查找第一个冒号
【发布时间】:2011-09-27 00:07:40
【问题描述】:

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

我想用制表符 (\t) 替换 ONLY 第一个冒号,然后 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

有什么建议吗?

【问题讨论】:

    标签: r regex


    【解决方案1】:

    也许使用sub 而不是gsub

    【讨论】:

      【解决方案2】:

      如果您有“inFile”并想要“outFile”,这里有一个稍微完整的示例...

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

      【讨论】:

      • 其实这也很优雅!我喜欢它。
      【解决方案3】:

      如果x 是您的列或向量:

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

      ?sub,上面写着

      ‘sub’和‘gsub’执行替换第一个和所有匹配 分别。

      【讨论】:

        【解决方案4】:

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

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

        \1 后面的那个空格实际上是一个制表符。要将它插入我的 shell,我需要按 Ctrl-v, .

        这是我运行命令后的结果:

        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
        

        【讨论】:

        • 我用过:sed 's/([^:]):/\1 /' new.txt
        • 在不转义括号的情况下对您有用吗?我必须将() 分别替换为\(\),才能使命令正常工作。
        • 最佳:'s/([^:]):/\1"\t"/' now_two_cols.txt
        • 如您所见,我添加了“\t”,以便我可以更轻松地使用 excel 和 R,但它确实有效,谢谢 David
        猜你喜欢
        • 2014-09-29
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        相关资源
        最近更新 更多