【问题标题】:delete characters in lines starting with an unique pattern删除以唯一模式开头的行中的字符
【发布时间】:2013-06-30 03:55:05
【问题描述】:

我有一个由许多条目组成的文件,如下所示:

>1761420406686363113470.1
CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA

即以 > 开头的标题行和许多序列行,然后是标题行。 我正在尝试编写一个 sed 脚本,该脚本仅转到以 > 开头的行(而不是序列行)并删除除前 10 个数字之外的所有数字。

有很多类似的问题,但我想不通。我一直在尝试修改这段代码:

sed 's/^>..........*/^>........../' input.fasta

但显然我做得不对..

【问题讨论】:

    标签: regex sed awk fasta


    【解决方案1】:

    这可能对你有用(GNU sed):

    sed -r 's/^(>.{10}).*/\1/p;d' file
    

    如果你想保留序列行,这会删除所有被替换的行:

    sed -r 's/^(>.{10}).*/\1/' file
    

    应该符合要求。

    【讨论】:

      【解决方案2】:

      您必须捕获括号中的前 10 个字符:

      sed -e 's/^\(>..........\).*/\1/'
      

      可以简写成

      sed -e 's/^\(>.\{10\}\).*/\1/'
      

      【讨论】:

      • { 和 } 周围的反斜杠不是错误吗?
      • @ShamirK.: 这可能取决于sed 的版本。在 GNU sed 中,-e 需要它们。
      • @choroba GNU sed v4.2.1:sed -E 's/^(>.{10}).*/\1/g',没有反斜杠
      • @ShamirK.:是的,我知道。但是您没有使用最便携的-e。此外,GNU sed 的-E 没有记录(它可能是-r 的别名)。
      • @choroba -e 不允许我使用反向引用
      【解决方案3】:

      作为 sed 的替代,使用 cut

      $ echo ">1761420406686363113470.1" | cut -c1-11
      >1761420406
      

      要对以> 开头的行进行操作,请将其包装在 bash-while-loop 中

      $ while read line; do if [[ $line == \>* ]]; then cut -c1-11 <<< $line; else echo $line; fi done < input
      >1761420406
      CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA
      

      或使用 awk:

      $ awk '{if ($0 ~ />/){print substr($0,0,11)}else{print}}' input
      >1761420406
      CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA
      

      【讨论】:

      • 但他只想截断以&gt; 开头的行,而不是所有行。
      • @Kevin 这就是为什么有一个if 语句来检查该行是否以&gt; 开头。
      • 我在 Kevins 评论之后添加了 if 语句 :-)
      【解决方案4】:

      由于 sed 的好答案已经发布,这里有一个 `GNU-awk 解决方案。

      gawk '/^>/{print gensub(/(.{11}).*/,"\\1","G",$1);next }1' inputFile
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-28
        相关资源
        最近更新 更多