unix - 在两个 > 符号之间保留行,保留第一个但不包括后续的
问题描述
我有一个这样的 DNA 文件,其中序列描述位于 > 符号之后的行上,序列位于下一行,直到下一个序列描述符 >。我想提取一个特定的序列(序列描述行+序列)而不保留下一个标识符行。
文件:
>k141_166416 flag=1 multi=2.0000 len=644
AAATAGTAAAACTCCAGAAGATGAATAATAAAAATCAGTCTCTAATATCTCATTTAATTGATCAGAAAAAATATTATTATAATCTAAATTTATTCTAGTATTTTTTAAAAATTGATTACTTAAGTCAAATTTAAAATAATCAACGATAATTCCTTTCTTCTCTTTCAAGTCAAAAGAAAAATCTCTATCAATATACTCTGAAGGATAAATTGTATAAAAATTCACAGACCAACCTTTAAAACATCTTATTTCAAAGTAGTACTTCTAAACAAGCATCTAGAGATACTACTTATTTTTGAATATTACTTACACTTTAACCATAAAAAAATTCTATAAAATACTCTATATCTAACAATACTTTTTCATTTATAAGAATTTTCTTTAACTCTTCTAAAAAACCTGTTTTATACCCTCCATTTTCACCTCTAGGGTTAGAGTCATATAGGTCAATAATTAAATTCTGCACAATATTAATTTGCGAAAAAAATCAAATAAATTTTTAGCAATGATATGTAATTCATCGCCTGAAATACATGCTCCTATCTCGCCACTATTATGATTAATGTATACGACATTTACATCATGCTGTGTTAAGAATACTGTAGTACTTTCCCCATCAAATATATCTTCAAACATATATTGAA
>k141_41604 flag=1 multi=2.0000 len=319
GGGCTCGTAGCCCATGGCCGGCTGCGTCAGGATGCGGCGCAGCTGCGCCATCACGCCCTGTGCTCGCTGGCGCGCGCGCATGAGCGGCCCGGTCAGGGGACCGCCGGCGGGCAGGTACATGCCGCCGCCCATGAATGACGCCGGCTGGCTGACGCGGCTGACCAGCTGCGTCGGCACGAAGCCGGCCTGGCGCGGCGCGCCGCTGTGGGAAAAACCGTAGCCGCTCGCAGGCGACCCCATGGGCCTGGAGGCGGGGCCGAGCGGCCCCGAGAGCGAGCCGGGGCCGGTGCCGTAGGGGCCCGATGCGTCCGGCCCCAGG
>k141_436839 flag=0 multi=1.0000 len=205
ATGAAATCACGATGTTTTTCTGATTCTACGAGTTAGGGAGAACATGAATCATCAGCTCTTTTTTAAATCTGGTGTTTGTCTGAGCCGGGAACCTCAGTTCTCAAAGGGCAGTTTTGCCATTGCGAGAATAGGCCATTTGAGCAATTGCGGTAATAGGCCGTTTCGGCCAAATTTCTTCTTGGTGTCACTCTTCAGGAAAAGAGAG
>k141_624048 flag=1 multi=3.0000 len=318
GTGCATAATCGCGGTATGGTGAAGGCCCGCTTCGACTTTTAGCGCCAACGCCAGCGCGCTATCAAAATCGCTGACTTTCACAATGGGCAGCATGGGCATCAGTTGTTCACACGTGACCCACGGATCTTCGGCATTCACCACCGCGATGAGCAGGCGAGGCGTTTTTGCCGGTGTTGCGATGTCTGATGCTTCCAGTAGCGTCGCCGGGCTCTTACCCACCAGTTTTTTATTCGCATGACCATCCTGTAGACAGACGGTACGTAATTTATCGGTGTCCGACGGGCTGAGAAGCAGCGCGCCAAACGCTTGCATCTGCTG
>k141_395237 flag=1 multi=4.0000 len=344
GCATACAATGGTGAGACTATGGTGGATCGACTAGATTGGGACAATGGTTTACTCGAAGGAACGGAAGTTTTAGGGCTGTTGAACTCGGCTCAAATTGTAGATATTCCATTTAAACCAAATGGACAATACGACCGAATTTCGATTGGACTGAAAAGCTTAATCCATGCGGATGTACTTTCGGCTATTGAAATCTACAAAGTAGAACGCGTATGTGATCTAATAGGATCTAACCAAAATTTAGTGTCGTGGAAGTCGTACAAAGTAAATGACGATGCTACTGTTACTTCGGTTTCAGGTGGTGAACAAGTGGAATATACCATCCATGTGAAAAATATAGGAACCAC
假设我希望将序列标识为>k141_436839
,这样输出文件是:
>k141_436839 flag=0 multi=1.0000 len=205
ATGAAATCACGATGTTTTTCTGATTCTACGAGTTAGGGAGAACATGAATCATCAGCTCTTTTTTAAATCTGGTGTTTGTCTGAGCCGGGAACCTCAGTTCTCAAAGGGCAGTTTTGCCATTGCGAGAATAGGCCATTTGAGCAATTGCGGTAATAGGCCGTTTCGGCCAAATTTCTTCTTGGTGTCACTCTTCAGGAAAAGAGAG
关于类似问题的帖子表明了这一点,但没有奏效:sed -n -e '/^>k141_436839 $/,/^>$/{ /^>$/d; p; }'
长度len=
也很重要。这是一个答案:
awk '/^>/{f=/>k141_436839 flag=0 multi=1.0000 len=205/} f' file
解决方案
$ awk '/^>/{f=/>k141_436839 /} f' file
>k141_436839 flag=0 multi=1.0000 len=205
ATGAAATCACGATGTTTTTCTGATTCTACGAGTTAGGGAGAACATGAATCATCAGCTCTTTTTTAAATCTGGTGTTTGTCTGAGCCGGGAACCTCAGTTCTCAAAGGGCAGTTTTGCCATTGCGAGAATAGGCCATTTGAGCAATTGCGGTAATAGGCCGTTTCGGCCAAATTTCTTCTTGGTGTCACTCTTCAGGAAAAGAGAG
请注意,无论每行之间有多少行,上面都会打印整个记录>
,并且它将与任何 UNIX 机器上的任何 shell 中的任何 awk 一起使用。
推荐阅读
- mysql - 如果 A 列和 B 列之间的值不同,如何删除值
- javascript - 锚滚动功能干扰滚动事件侦听器逻辑以隐藏/显示“返回顶部”按钮
- c++ - c ++破坏顺序,是可选的吗?
- docker - 在 Ubuntu 20.04 上从 GCE vm 中的 GCR 拉取
- python - 从响应文本中过滤行
- sockets - 更改选项卡后 Flutter Socket IO 无法获取数据
- python - Openpyxl - 将图像转换为 Excel 电子表格后出错,styles.xml 可能存在问题
- php - 我在 HTACCESS 中缺少什么
- r - 在 R 中为 curl -X POST 编写适当的 API 请求
- apache-flink - Flink 应用程序一直在运行/活着,但作业已经消失