2017-03-17 96 views
0

試圖使用AWK匹配file中的每行內容與list中的$2。這兩個文件是製表符分隔,並有可能在list被匹配在名稱中有空格或特殊字符,例如在file名稱是BRCA1list名稱是BRCA 1file名字是BCRlist名稱是BCR/ABLawk打印字段匹配使用條件和兩個文件中不匹配的默認值

如果存在匹配,並且list$4中有full gene sequence,則將被打印,並由製表符分隔。如果沒有找到匹配,那麼不匹配的名稱和14將被打印,並用製表符分隔。下面的awk執行,但沒有輸出結果。謝謝 :)。

文件

BRCA1 
BCR 
SCN1A 
fbn1 

列表

List code gene gene name methodology 
81 DMD dystrophin deletion analysis and duplication analysis 
811 BRCA 1 BRCA2 full gene sequence and full deletion/duplication analysis 
70 ABL1 ABL1 gene analysis variants in the kinse domane 
71 BCR/ABL t(9;22) full gene sequence 

AWK

awk -F'\t' -v OFS="\t" 'FNR==NR{A[$1]=$0;next} ($2 in A){if($4=="full gene sequence"){print A[$2],$1}} ELSE {print A[$2],"14"}' file list 

渴望Desir ED輸出

BRCA1 811 
BCR 71 
SCN1A 14 
fbn1  85 

編輯

List code gene gene name methodology 
85 fbn1 Fibrillin full gene sequencing 
95 FBN1 fibrillin del/dup 

結果

85 fbn1 Fibrillin full gene sequencing 

因爲只有這一行full gene sequencing在它,僅此被打印。

+1

定義'match':string或regexp?部分或全部?區分大小寫/不敏感?如果沒有這些信息,你很可能會得到一個適用於某些特定測試輸入設置的解決方案,但在6個月後你的真實數據就失敗了。現在你有兩種不同的解決方案,每種解決方案都會根據'match'的含義做出非常不同的假設,並且每種解決方案的行爲都會因不同的輸入集合而異,即使它們會根據您提供的示例輸入產生相同的輸出。 –

+0

匹配是一個完整且不區分大小寫的字符串....即「BRCA1」是匹配,但它可以是「brca1」或「brca 1」。另外,我只注意到'$ 4'或'完全基因序列'不包括在內,並且由於可能有多個條目用於相同的匹配,所以它使得它是唯一的。我在帖子中也包含了一個例子。謝謝 :)。 – Chris

+0

'file'中的名稱將匹配'list'的'$ 2'中的字符串。在'list'中,匹配的名稱可能是字符串的一部分,但它始終是來自'file'的完整名稱。這就是'BCR'的名字與'list','BCR/ABL'中的'$ 2'字符串匹配的名字。謝謝 :)。 – Chris

回答

1

你可以試試,

awk 'BEGIN{FS=OFS="\t"} 
FNR==NR{ 
    if(NR>1){ 
     gsub(" ","",$2)  #removing white space 
     n=split($2,v,"/") 
     d[v[1]] = $1   #from split, first element as key 
    } 
    next 
}{print $1, ($1 in d?d[$1]:14)}' list file 

你得到了,

 
BRCA1 811 
BCR 71 
SCN1A 14 
+0

非常感謝你們:)。 – Chris

1
awk 'FNR==NR{ 
      a[$2]=$1; 
      next 
     } 
    { 
     for(i in a){ 
      if($1 ~ i || i ~ $1){ print $1, a[i] ; next } 
     } 
     print $1,14 
    }' list file 

輸入

$ cat list 
List code gene gene name methodology 
81 DMD dystrophin deletion analysis and duplication analysis 
811 BRCA 1 BRCA2 full gene sequence and full deletion/duplication analysis 
70 ABL1 ABL1 gene analysis variants in the kinse domane 
71 BCR/ABL t(9;22) full gene sequence 

$ cat file 
BRCA1 
BCR 
SCN1A 

輸出

$ awk 'FNR==NR{ 
      a[$2]=$1; 
      next 
     } 
    { 
     for(i in a){ 
      if($1 ~ i || i ~ $1){ print $1, a[i] ; next } 
     } 
     print $1,14 
    }' list file 
BRCA1 811 
BCR 71 
SCN1A 14