Grep输出增加了额外的破折号和换行符

时间:2014-09-08 21:16:24

标签: grep

我在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
--

我需要通过命令行完成此操作,因为我试图将其实现到脚本中以自动执行一些示例处理。

非常感谢任何输入! 干杯, 三

2 个答案:

答案 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