在下面的awk
中,我仅尝试更新file2
中以>
开头的行,其中$2
中的file1
在第二个之后匹配_
。如果是,则用$1
中的file1
更新该部分。我还尝试在更新后删除该字段中的最后一个_
,但是我不确定如何删除。 awk
已执行,但目前我已打印所有file1
和file2
。如果仅打印,则可以看到仅搜索>
行,但是不确定。可能并不总是存在匹配,并且不需要进行任何处理。谢谢:)。
file1 space delimited
SCN1A NM_001165963.1
SCN1B NM_001037.4
文件2 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
'
答案 0 :(得分: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
....
....