試圖使用AWK匹配file
中的每行內容與list
中的$2
。這兩個文件是製表符分隔,並有可能在list
被匹配在名稱中有空格或特殊字符,例如在file
名稱是BRCA1
但list
名稱是BRCA 1
或file
名字是BCR
但list
名稱是BCR/ABL
。awk打印字段匹配使用條件和兩個文件中不匹配的默認值
如果存在匹配,並且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
在它,僅此被打印。
定義'match':string或regexp?部分或全部?區分大小寫/不敏感?如果沒有這些信息,你很可能會得到一個適用於某些特定測試輸入設置的解決方案,但在6個月後你的真實數據就失敗了。現在你有兩種不同的解決方案,每種解決方案都會根據'match'的含義做出非常不同的假設,並且每種解決方案的行爲都會因不同的輸入集合而異,即使它們會根據您提供的示例輸入產生相同的輸出。 –
匹配是一個完整且不區分大小寫的字符串....即「BRCA1」是匹配,但它可以是「brca1」或「brca 1」。另外,我只注意到'$ 4'或'完全基因序列'不包括在內,並且由於可能有多個條目用於相同的匹配,所以它使得它是唯一的。我在帖子中也包含了一個例子。謝謝 :)。 – Chris
'file'中的名稱將匹配'list'的'$ 2'中的字符串。在'list'中,匹配的名稱可能是字符串的一部分,但它始終是來自'file'的完整名稱。這就是'BCR'的名字與'list','BCR/ABL'中的'$ 2'字符串匹配的名字。謝謝 :)。 – Chris