我在Mac上使用bash来运行一些grep,我使用安装了macports的GNU grep。无论如何,我试图用grep查询fasta文件(DNA序列 - 在一行上的序列ID与下一行的DNA序列),根据要查询的字符串文件列表输出文件的子集。目前我有一个列表,它是在换行符和fasta文件上分隔的单个单词,并使用命令
grep -A1 -f query_list.txt initial_file.fasta > query_subset.fasta
这几乎产生输出后的输出,但是在输出文件中,在每个与查询文件中的字符串匹配的序列集之后,换行符上有一个双短划线。不知道为什么会发生这种情况。我尝试用sed删除它们
sed 's/\n--\n/\n' query_subset.fasta > final.fasta
但这不起作用。如果我在textwrangler中使用相同的查找和替换它可以正常工作。
无论如何,作为一个例子,文件看起来像
query_list.txt
SpeciesA
SpeciesC
initial_file.fasta
>SpeciesA
ACGTGATCGATCGAT
>SpeciesB
ACGGGTCTTAGTATCG
>SpeciesC
ACGTACGATCTTCAGT
>SpeciesD
ACGTTCAGTCAGTTCAG
query_subset.fasta
>SpeciesA
ACGTGATCGATCGAT
--
>SpeciesC
ACGTACGATCTTCAGT
--
我需要通过命令行完成此操作,因为我试图将其实现到脚本中以自动执行一些示例处理。
非常感谢任何输入! 干杯, 三
答案 0 :(得分:2)
grep -A1 -f query_list.txt initial_file.fasta | sed '/^--/d' > final.fasta
或
grep -A1 -f query_list.txt initial_file.fasta | grep -v '^--' > final.fasta
答案 1 :(得分:0)
根据手册页:
-A NUM, - after-context = NUM 匹配行后打印NUM行尾随上下文。 放置一行包含 - 在连续的组之间 匹配。
我尝试了以下内容并且有效:
cat query_list.txt | xargs -I {} grep -A1 {} initial_file.txt > query_subset.fasta
我不太清楚为什么输入模式来自std in时会有不同的处理方式,所以最好只删除有问题的行:
grep -A1 -f query_list.txt initial_file.txt | grep -v "\-\-" > query_subset.fasta