我有兩個文件 - 一個是包含基因變體的大文件,多個列由製表符分隔。含有該基因的名稱列可以包含一個名稱,或由逗號分隔的多個名稱(例如,在基因名稱是SAMD11和NOC2L):當第二個文件列包含逗號時,使用awk將一個文件的列與另一個文件的列匹配
1 874816 874816 - T rs200996316 SAMD11 exonic ENSG00000187634 frameshift insertion
1 878331 878331 C T rs148327885 SAMD11 exonic ENSG00000187634 nonsynonymous SNV
1 879676 879676 G A rs6605067 NOC2L,SAMD11 UTR3 ENSG00000187634,ENSG00000188976
1 879687 879687 T C rs2839 NOC2L,SAMD11 UTR3 ENSG00000187634,ENSG00000188976
1 881918 881918 G A rs35471880 NOC2L exonic ENSG00000188976 nonsynonymous SNV
1 888659 888659 T C rs3748597 NOC2L exonic ENSG00000188976 nonsynonymous SNV
第二個文件是基因名稱的單個列列表,如這個:
EVC2
SAMD11
COMT
我想匹配第二個文件中的基因名稱與第一個文件中的基因名稱。我目前使用的AWK:
awk -F $'\t' 'BEGIN { while(getline <"secondfile.txt") gene[$0]=1; } gene[$7]' firstfile.txt > newfile.txt
然而,這僅僅打印精確匹配,從而不打印與NOC2L,SAMD11行。從上面的例子中,預期產出將是第一個文件的前四行:
1 874816 874816 - T rs200996316 SAMD11 exonic ENSG00000187634 frameshift insertion
1 878331 878331 C T rs148327885 SAMD11 exonic ENSG00000187634 nonsynonymous SNV
1 879676 879676 G A rs6605067 NOC2L,SAMD11 UTR3 ENSG00000187634,ENSG00000188976
1 879687 879687 T C rs2839 NOC2L,SAMD11 UTR3 ENSG00000187634,ENSG00000188976
我想它還是做精確匹配,因爲一些基因的名字可以是相似的 - 例如,有可能是一個基因稱爲SAMD1,如果我做了模糊匹配,那麼我會得到SAMD1,SAMD11等。所以我需要一些確實匹配的東西,但忽略基因名稱列中的逗號,或將其視爲字段分隔符或類似字符。
在此先感謝。
謝謝,已經這樣做了。 –