awk根据两个文件中的3个字段匹配来更新文件

时间:2018-03-24 18:39:18

标签: awk

尝试使用awk$5的值存储在数组file1的{​​{1}}中。然后使用该数组x搜索x $4以找到匹配项(我使用x [2]跳过file1中的标题)。由于file1可以在其中分隔多个字符串$4(逗号),因此我将它们拆分并迭代以查找匹配项。然后将每个拆分存储在数组中,并与,进行比较以进行匹配。在下面的示例中,所有x[2]值都是matc,但情况并非总是如此。模式$4将从每个匹配的c.中提取并存储为VAL。下面的$4有望这样做但我正在努力的地方是awk $6更新,file1$2以及数组值必须与$3中的$4$5以及$6匹配。如果确实如此,那么file2中的$6将使用file1$1$2的值进行更新。第4行是一个示例,因为file2匹配数组NM_000138.4x[2]值与c.(冒号)匹配: $6 }}。因此,file2中的所有条件都会更新$6。除了file1中的c.值与VAL中的$6不匹配外,Line2满足所有要求,因此file2不会更新。我希望这是一个良好的开端,我并没有过于复杂的事情(尽管我可能有,并且可能有更好的方法)。我没有对file1进行测试,但将其作为一个说明点,对我的想法进行了评论。谢谢你:)。

file1 awk

tab-delimited

file2 R_Index Chr Start AAChange.refGeneWithVer MajorTranscript HGMD C1 C2 1 chr15 48720526 FBN1:NM_000138.4:exon57:c.6997+17C>G:p.? NM_000138.4 . . . 2 chr15 48741091 FBN1:NM_000138.4:exon46:c.5546-1G>A:p.? NM_000138.4 . . . 3 chr15 48807637 FBN1:NM_000138.4:exon12:c.1415G>A:p.Cys472Tyr NM_000138.4 . . . 4 chr15 48741091 FBN1:NM_000138.4:exon46:c.5546-1G>A:p.?,FBN1:NM_000138.4:exon46:c.5546-1G>T:p.? NM_000138.4 . . .

tab-delimited

所需的输出 HGMD ID Class Gene Symbol chromosome start hgvs CS057007 DM FBN1 chr15 48797346 c.1838-2A>G CS057008 DM FBN1 chr15 48741091 c.5546-1G>T

tab-delimited

AWK

R_Index Chr Start   AAChange.refGeneWithVer MajorTranscript HGMD C1 C2
1   chr15   48720526    FBN1:NM_000138.4:exon57:c.6997+17C>G:p.?    NM_000138.4 . . .
2   chr15   48741091    FBN1:NM_000138.4:exon46:c.5546-1G>A:p.? NM_000138.4 . . .
3   chr15   48807637    FBN1:NM_000138.4:exon12:c.1415G>A:p.Cys472Tyr   NM_000138.4 . . .
4   chr15   48741091    FBN1:NM_000138.4:exon46:c.5546-1G>A:p.?,FBN1:NM_000138.4:exon46:c.5546-1G>T:p.? NM_000138.4 CS057008 DM . .

1 个答案:

答案 0 :(得分:1)

请您试着跟随并告诉我这是否对您有帮助。

emcc -Idir1 -Idir2 ... foo.c

现在也添加一个非单一的衬垫形式。

awk 'FNR==NR{a[$NF]=$1 OFS $2;next} {split($4,array,":");for(i in array){if(array[i] in a){print $0,a[array[i]];next}}} 1' Input_file2 Input_file1