【问题标题】:Grep output adds extra dashes and newlinesGrep 输出添加了额外的破折号和换行符
【发布时间】:2014-09-08 21:16:23
【问题描述】:

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

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

非常感谢任何输入! 干杯, 特里斯

【问题讨论】:

  • -- 组分隔符 总是在使用-A, -B, or -C 上下文说明符时插入行组之间。请参阅下面的sed 解决方案之一以删除。

标签: grep


【解决方案1】:
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

【讨论】:

  • 您确定要将^ 加入grep -v '^--' > final.fasta 吗?没关系 - 你是对的:)
  • 谢谢!这两个都有效!虽然我在 final.fasta 的末尾得到了一个额外的换行符?这只是一个 grep 的事情吗?
  • 抱歉,您的 query_list.txt 和 initial_file.fasta 无法重现。
【解决方案2】:

根据手册页:

-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

【讨论】:

  • 谢谢!你的第二行对我有用,出于某种原因,第一行只是给了我一个空白文件。
猜你喜欢
  • 2014-07-25
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多