【问题标题】:awk to update portion of a line in file1 matching another filed in file2awk 更新 file1 中与 file2 中的另一个文件匹配的行的一部分
【发布时间】:2018-08-18 02:43:57
【问题描述】:

在下面的awk 中,我试图只更新file2 中以> 开头的行,其中file1 中的$2 在第二个_ 之后匹配。如果它使用$1file1 更新该部分。我也试图在更新后删除该字段中的最后一个_,但我不确定如何。 awk 执行,但目前我得到了所有 file1file2 打印。如果我只是打印,我可以看到只有> 行正在被搜索,但我不确定。可能并不总是匹配,不需要发生任何事情或得到处理。谢谢你:)。

file1 space delimited

SCN1A NM_001165963.1
SCN1B NM_001037.4

file2 space delimited

 >hg19_ncbiRefSeq_NM_001165963.1_2 range=chr2:166912896-166913035 5'pad=25 3'pad=25
 ....
 ....
 >hg19_ncbiRefSeq_NM_001165963.1_4 range=chr2:166909337-166909478 5'pad=25 3'pad=25
 ....
 ....

想要的输出

>hg19_ncbiRefSeq_SCN1A range=chr2:166912896-166913035 5'pad=25 3'pad=25
....
....
>hg19_ncbiRefSeq_SCN1A range=chr2:166909337-166909478 5'pad=25 3'pad=25
....
....

awk

awk '/^>/; {a[$2]=$1; next} a[$1]{$1=a[$1]}1' file1 file2

评论awk

awk '
FNR==NR{  # process same line
 a[$2]=$1  # use $2 to and store $1 in a
   next    # process next line
}
  />/{  # each line starting with >
   for(i in a){  # start loop
   value=""
    if(match($0,i)){   # look for match in i 
    value=substr($0,RSTART+RLENGTH)  # store match in value
      sub(/^_[0-9]+ /,"",value)   # update the NM_digits only
     print substr($0,1,RSTART-1) a[i],value  # print the updated i with portion below
      next  # process next line
    }
  }
}
 1   # update output
 ' 

【问题讨论】:

    标签: awk


    【解决方案1】:

    请您尝试关注一下。

    awk '
    FNR==NR{
       a[$2]=$1
       next
    }
    />/{
       for(i in a){
         value=""
         if(match($0,i)){
           value=substr($0,RSTART+RLENGTH)
           sub(/^_[0-9]+ /,"",value)
           print substr($0,1,RSTART-1) a[i],value
           next
         }
       }
    }
    1
    ' Input_file1   Input_file2
    

    示例输入的输出如下所示。

     >hg19_ncbiRefSeq_SCN1A range=chr2:166912896-166913035 5'pad=25 3'pad=25
     ....
     ....
     >hg19_ncbiRefSeq_SCN1A range=chr2:166909337-166909478 5'pad=25 3'pad=25
     ....
     ....
    

    【讨论】:

    • 非常感谢 :),我可以稍后用 cmets 回帖。谢谢你:)。
    • @cm0728,如果这对您有帮助,请务必告诉我。
    • awk 很好用,谢谢。我在帖子中发布了我的 cmets :)。
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多