【发布时间】:2018-08-18 02:43:57
【问题描述】:
在下面的awk 中,我试图只更新file2 中以> 开头的行,其中file1 中的$2 在第二个_ 之后匹配。如果它使用$1 或file1 更新该部分。我也试图在更新后删除该字段中的最后一个_,但我不确定如何。 awk 执行,但目前我得到了所有 file1 和 file2 打印。如果我只是打印,我可以看到只有> 行正在被搜索,但我不确定。可能并不总是匹配,不需要发生任何事情或得到处理。谢谢你:)。
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