我正在尝试使用 grep sed 或 awk 来解析文件的单独行的字符之间[重复]

问题描述 投票:0回答:1

尝试在本示例文本中解析

behen
>
的下一个实例:

>S_behen_BOx6592|contig_6484&contig_7580
TCCGAACCATAGCAAACATCGAAAGGAGTTTCGAAGGAAGTTCCTGAGATGTTATAAAAG
TCAACTCCTTTTGGAAGTTTTGCTTTATTGATGAGTTGACGAGTACCAGCAGCCCATTTC
AGAATGGCATAGTTGAAAGGAAGAGCAAATGTTTTTCCATTGAAATCAAGCTCATTATGC
CTCAATGCCTCCTCAAAAACAACGGTACTTTGAAGCGGGCCATAAGATTCTAGCTTCACA
GAAGGAGGTGCTTCTTCGTCTTCTTTATCTGGAGTTACTTTACGCCAAACCTGAATTTGG
GGAGTCTTCTTCCACTCGAATACCGGATTGGGCAACATTTCATAAATAGATGGACACTCA
ATTACCAGTTGGTGCATGGTCCATCTCCCCACAAAAAAATAACTTTCAAAACCTTCAATG
AATTGCAGTCCAGTTAAAAGAGCATCATTGACGCATCCTGGTGCACCTTGAAAAGGACAA
GCAATGCAAATCCACTTGCTGACATACTTGGAAAATA
...
>S_dichotoma_BOx6597|contig_19038_allele_0&contig_8274_allele_0
TCCGAACCATAGCAAACATCAAAAGGAGTTTCGAATGAAGTTCCGGAGATGTTGAAAAAG
CTAACTCCTTTTGGAAGTTTTGCTTTATTGATGAGTTGACGAGTGCCAGCAGCCCATTTC
AGAATAGCATAGTTGAAAGGAAGAGCGAATGTTTTTCCATTGAAATCAAGCTCATTATGC
CTCAATGCCTCCTCAAAAACAGTGGGACTTTGAAGCGGGCCATACGATTCTAGCTTCGCA
GAAGGAGGTGCTTCTTCATCTTCTTTGTCTGGAGTTACTTTACGCCAAACCTGAATTTGG
GGAGTCTTCTTCCACTCGAATACTGGATTTGGCAACATCTCATAAATAGATGGACACTCA
ATTACCAGTTGGTGCATGGTCCATCTCCCCACAAAAAAATAACTTTCAAAACCTTCAATG
AATTGCAGCCCAGTTAAAAGAGCATCATTGACGCATCCTGGTGCACCTTGAAAAGGGCAA
GCAATGCAAATCCACTTACTGACATACTTGGAAAAAA-ATCAGGATATAGTGTCATGAAA
CACCTAATCAGTACTCCTCCCATAGAATGCGATATTAAGTTGACTTGTCTTCCCCCAGAA
GCTTTGTGTGCAGTTTCCAGCTTAGCTTAAGGCCCTCCATT
...
>S_dichotoma_BOx6597|contig_8274_allele_1&contig_19038_allele_0
TCCGAACCATAGCAAACATCAAAAGGAGTTTCGAATGAAGTTCCGGAGATGTTGAAAAAG
CTAACTCCTTTTGGAAGTTTTGCTTTATTGATGAGTTGACGAGTGCCAGCAGCCCATTTC
AGAATAGCATAGTTGAAAGGAAGAGCGAATGTTTTTCCATTGAAATCAAGCTCATTATGC
CTCAATGCCTCCTCAAAAACAGTGGGACTTTGAAGCGGGCCATACGATTCTAGCTTCGCA
GAAGGAGGTGCTTCTTCATCTTCTTTGTCTGGAGTTACTTTACGCCAAACCTGAATTTGG
GGAGTCTTCTTCCACTCGAATACTGGATTTGGCAACATCTCATAAATAGATGGACACTCA
ATTACCAGTTGGTGCATGGTCCATCTCCCCACAAAAAAATAACTTTCAAAACCTTCAATG
AATTGCAGCCCAGTTAAAAGAGCATCATTGACGCATCCTGGTGCACCTTGAAAAGGGCAA
GCAATGCAAATCCACTTACTGACATACTTGGAAAAAA-ATCAGGATATAGTGTCATGAAA
CACCTAATCAGTACTCCTCCCATAGAATGCGATATTAAGTTGACTTGTCTTCCCCCAGAA
GCTTTGTGTGCAGTTTCCATCTTAGCTTAAGGCCCTCCATT

到目前为止,我尝试使用

-A
中的
grep
标志来获取第一个模式之后的后续行,但他并不适用于我最终必须解析的每个文件。我只想最终使用开始名称并让它抓取文件中开始和下一个“>”字符之间的每一行。

unix awk sed grep fasta
1个回答
1
投票

这对于 Awk 来说确实是微不足道的。提问前请搜索一下。

awk 'p && /^>/ { exit }
  /^>.*behen/ { p=1 }
  p' file.fasta >newfile.fasta

回想一下,Awk 一次检查一行(或者更严格地说,一条记录)。在第二个条件匹配之前,

p
将是未定义的,因此 Awk 将忽略输入并跳到下一行。一旦条件匹配,
p
为 true,因此第一个条件控制何时停止处理行并终止脚本(即,下次我们看到标题行时)。最后,如果我们到达脚本的最后一行并且
p
为 true,我们将打印该行。

© www.soinside.com 2019 - 2024. All rights reserved.