在两个>符号之间保留行,保留第一个,但不包括下一个

时间:2019-04-27 04:46:07

标签: unix awk sed

我有一个这样的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

4 个答案:

答案 0 :(得分:1)

>

请注意,无论每行"scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", "lint:css": "stylelint src/**/*.js", "flow": "flow", "precommit": "lint-staged" }, "husky": { "hooks": { "pre-commit": "yarn precommit" } }, 之间有多少行,以上内容都会打印整个记录,并且可以在任何UNIX盒的任何shell中的任何awk上使用。

答案 1 :(得分:1)

看起来很简单:

sed -n '/^>k141_436839 /{N;p;}'

答案 2 :(得分:1)

请您尝试以下。

awk -v value=">k141_436839" '/^>/{found=""} $1==value{print;found=1;next} found{print}' Input_file

我在这里创建了一个名为value的变量,其值与字符串匹配,因此您可以根据需要进行更改,然后代码将查找该字符串。

答案 3 :(得分:1)

如果d文件中的数据,请尝试使用gnu bash并sed,
在控制台上或放入bash脚本文件中:

id=k141_436839    
sed -En "/^>$id/{N;p;q}" d

添加-i选项可将结果返回到数据d

相关问题