2015-11-06 37 views
0

因爲我是一名生物學家,並通過修補和編輯這樣的代碼形式論壇來做我的信息學,所以我提前道歉,爲新手的錯誤。模式匹配與存儲變量或正則表達式在Bash

我一直在嘗試迭代File2中的文件和搜索模式,當此模式是File1中的第一行時。我的目標是將模式後的一行追加到outFile中。

我第一次嘗試插入這樣的正則表達式:

awk 'c&&!--c;/"${head -1 "$File1"}"/{c=1}' "$File2" >> outFile 

其次圖案存儲到變量:

pattern=$(head -1 "$File1") 
awk 'c&&!--c;/"$pattern"/{c=1}' "$File2" >> outFile 

(文件1和File2都標有「$」,因爲我打電話他們與for循環)。

但都不起作用。如果我直接寫模式,它的工作正常,所以一切似乎都很好。

所以我處理的序列數據,和爆破後,我得到的點擊到文件1的列表,它看起來是這樣的:

BLAST_hit_Jerry 
BLAST_hit_Tom 
BLAST_hit_Dog 
... 

現在傑裏是最好的。我想提取第一行(BLAST打傑裏)和序列文件(文件2)模式匹配它,看起來像:

>BLAST_hit_BugsBunny_andsomethingelse 
unique_sequence_BugsBunny 
>BLAST_hit_MickyMouse_andsomethingelse 
unique_sequence_MickyMouse 
>BLAST_hit_Jerry_andsomethingelse 
unique_sequence_Jerry 
... 

我有很多文件1爆擊文件和我迭代與文件2序列文件並且始終只將outFile存儲在與頂部BLAST命中相對應的一個unique_sequence中。 outFile看起來像這樣:

unique_sequence_Jerry 
unique_sequence_from_second_loop_(other sequence corresponding to next top BLAST hit) 
unique_sequence ... 

謝謝你的幫助!

+0

這是一個正則表達式模式還是一個固定的字符串,你試圖匹配? –

+0

我想匹配正則表達式,返回字符串(File1中的第一行)。我剛剛用固定字符串驗證了其餘代碼工作正常。 – AcoBetalow

+0

在文件夾中我有多個File1 - File2對,我迭代並將輸出存儲到單個outFile中。 – AcoBetalow

回答

0

$pattern未在單引號內展開。將該值作爲awk變量傳遞,然後使用~運算符來匹配該值。

awk -v p="$pattern" 'c&&!--c; $0 ~ p {c=1}' "$File2" >> outFile 
+0

它完美的作品!謝謝。 – AcoBetalow