使用awk删除与列表文件中的特定数字不匹配的行

时间:2016-05-18 21:42:32

标签: awk

我正在尝试使用awk删除file中与NM_之后但. $2之前的数字不匹配的行list。谢谢你:)。

文件

204 NM_003852   chr7    +   138145078   138270332   138145293   
204 NM_015905   chr7    +   138145078   138270332   138145293   

列表

TRIM24 NM_015905.2

AWK

awk -v OFS="\t" '{ sub(/\r/, "") } ; NR==FNR { N=$2 ; sub(/\..*/, "", $2); A[$2]=N; next } ; $2 in A { $2=A[$2] } 1' list file > out

当前输出

204 NM_003852   chr7    +   138145078   138270332   138145293   
204 NM_015905.2 chr7    +   138145078   138270332   138145293   

所需的输出(第1行被删除,因为那是不匹配的行)

204 NM_015905.2 chr7    +   138145078   138270332   138145293

2 个答案:

答案 0 :(得分:2)

awk 'NR==FNR{split($2,f2,".");a[f2[1]];next} $2 in a' list file

答案 1 :(得分:1)

$ awk -F'[ .]' 'NR==FNR{a[$2];next}$2 in a' list file
204 NM_015905   chr7    +   138145078   138270332   138145293