我有這個代碼來獲取條目列表的幾個序列。這匹配每個列表(如OMA999.fas)在一個大文件中的序列(sequences.fa)如何執行循環來搜索awk中幾個文件中包含的字符串並打印新文件?
awk 'NR==1{printf $0"\t";next}{printf /^>/ ? "\n"$0"\t" : $0}' sequences.fa | awk -F"\t" 'BEGIN{while((getline k <"OMA999.fas")>0)i[k]=1}{gsub("^>","",$0); if(i[$1]){print ">"$1"\n"$2}}'
此代碼工作正常。現在我需要一個循環,我嘗試了下面的代碼,但它似乎不匹配任何字符串。我不知道for循環的結構是否錯誤,但我認爲它所稱的部分getline k < "$file"
正在工作。
for file in *.fas; do awk 'NR==1{printf $0"\t";next}{printf /^>/ ? "\n"$0"\t" : $0}' sequences.fa | awk -F"\t" 'BEGIN{while((getline k < "$file")>0)i[k]=1}{gsub("^>","",$0); if(i[$1]){print ">"$1"\n"$2}}' > $(basename $file).nuc; done
我必須補充的是,第一個代碼留下了一個文件改名OMA999.fas.nuc與儘可能多的序列作爲OMA文件中的行。現在我想要一個循環後的.nuc文件列表。
感謝您的幫助。
我不是很清楚你想要什麼。是不是你有一堆模式的文件,你想從該文件中讀取這些模式,然後使用這些模式來匹配另一個文件或一系列文件中的行? – Mort
我是用第一個腳本做的。現在我需要一個循環來搜索包含不同模式的一系列文件,並且使用每個搜索的輸出返回文件,這將是另一個循環內部的循環。 –
您現有的第一個腳本看起來非常冗餘,請發佈示例輸入/輸出文件。 「 – karakfa