我正在尝试使用
awk
提取并打印出第一个出现的 NM_
以及之后以 p.
开头的NP_
部分。每个 "|" 的位置将被替换为 :
。输入文件是 tab-delimeted
,但输出不需要是这种格式。下面的代码可执行,但会打印文件中的所有行,而非只有指定的模式。我的实际数据中可能有多个 NM
或 NP
,但只有每个的第一次出现会被提取和打印。我对 RSTART
和 RLENGHTH
的概念仍有些不清楚,以输入的第一行为例:
NM
变量将是 NM_020469.2
NP
变量将是 :p.Gly268Arg
我也加入了注释。谢谢 :)
输入
Input Variant HGVS description(s) Errors and warnings
rs41302905 NC_000009.11:g.136131316C>T|NM_020469.2:c.802G>A|NP_065202.2:p.Gly268Arg
rs8176745 NC_000009.11:g.136131347G>A|NM_020469.2:c.771C>T|NP_065202.2:p.Pro257=
期望输出
rs41302905 NM_020469.2:c.802G>A:p.Gly268Arg
rs8176745 NM_020469.2:c.771C>T:p.Pro257=
awk
awk -F'[\t|]' 'NR>1{ # define FS as tab and `|` to split each, and skip header line
r=$1; nm=np=""; # create variable r with $1 and 2 variables (one for nm and the other for np, setting them to null)
for(i=2;i<=NF;i++) { # start a loop from line2 and itterate
if ($i~/^NM_/) nm=$i; # extract first NM_ in line and read into i
else if ($i~/^NP_/) np=substr($i,index($i,":")); # extract NP_ and print portion after : (including :)
if (nm && np) { print r,nm np; break } # print desired output
}
}' input