我有这个代码来获取条目列表的几个序列。这匹配每个列表(如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