【问题标题】:Removing only part of character line in txt file - chr string仅删除 txt 文件中的部分字符行 - chr 字符串
【发布时间】:2021-05-20 17:05:23
【问题描述】:

我想使用 bash 删除以下 txt 文件中的字符串“chr”:

    FO538757.1      chr1:183937
    AL669831.3      chr1:601436
    AL669831.3      chr1:601667
    AL669831.3      chr1:609395
    AL669831.3      chr1:609407
    AL669831.3      chr1:611317

所以最终文件看起来像:

FO538757.1      1:183937
AL669831.3     1:601436
AL669831.3     1:601667
AL669831.3     1:609395
AL669831.3     1:609407
AL669831.3     1:611317
  1. 我检查了以前的线程并尝试了:

    sed 's/^chr//' 
     awk 'BEGIN {OFS=FS="\t"} {gsub(/chr1/,"1",$2)}2'
    
  2. 他们都没有工作。这里有比 awk 更好的选择吗?

谢谢!

【问题讨论】:

  • 您是否真的在每一行的开头都有一堆空白,您也想删除?如果你没有这样做,你会得到答案,如果没有,那么请edit你的问题来解决你的例子。
  • 我看到您从未接受过任何问题的答案。请阅读stackoverflow.com/help/someone-answers

标签: awk bioinformatics genetics vcf-variant-call-format


【解决方案1】:

我怀疑你真正需要的是:

sed 's/chr//' file

【讨论】:

【解决方案2】:

您可以使用sed 和两个表达式轻松做到这一点,(1) 第一个删除chr,第二个删除前导空格,例如

sed -e 's/chr//' -e 's/^[[:blank:]]*//'  file

使用/输出示例

在名为file 的文件中输入您的内容,您将拥有

$ sed -e 's/chr//' -e 's/^[[:blank:]]*//'  file
FO538757.1      1:183937
AL669831.3      1:601436
AL669831.3      1:601667
AL669831.3      1:609395
AL669831.3      1:609407
AL669831.3      1:611317

【讨论】:

    【解决方案3】:

    使用您展示的示例,请尝试以下操作。简单的解释是:在第二个字段中用 NULL 替换起始 chr 并打印该行,这将导致当前行的重建,并且初始空格也将从行中删除。

    awk '{sub(/^chr/,"",$2)} 1' Input_file
    

    如果您的 Input_file 是制表符分隔的,并且文件开头有制表符,请尝试以下操作:

    awk 'BEGIN{FS=OFS="\t"} {sub(/^chr/,"",$3);sub(/^\t+/,"")} 1' Input_file
    

    【讨论】:

      【解决方案4】:

      bash shell 与Parameter Expansionmapfile 又名readarray 一起使用

      #!/usr/bin/env bash
      
      shopt -s extglob
      
      mapfile -t array < file.txt
      
      array=("${array[@]##+([[:space:]])}")
      
      printf '%s\n' "${array[@]/chr}"
      

      在脚本内部extglob 必须启用,但在命令行中可能已经启用,所以在一行中

      mapfile -t array < file.txt; array=("${array[@]##+([[:space:]])}"); printf '%s\n' "${array[@]/chr}"
      

      对于大量的数据/文件来说会很慢,jfyi

      【讨论】:

        猜你喜欢
        • 2018-10-18
        • 2015-12-02
        • 1970-01-01
        • 2014-05-16
        • 1970-01-01
        • 2021-03-17
        • 2017-07-02
        • 2014-07-24
        相关资源
        最近更新 更多