仅当线以相同字符开头的线之后,我才能删除该行



我需要在SED或尴尬方面提供一些帮助。

只有在线下的线以相同字符开始的行(在这种情况下)?

时,我才能删除该行

示例我有这个:

>1_SRR1422294
ATCGTCAGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAT
>2_SRR1422294
CGTCAGACGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAG
>5_SRR1422298
>5_SRR1422294
CGTCAGACGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAG
>6_SRR1422294
>6_SRR1422250
TGTTCATGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCACATCTCACGACACGAGCTGACGACAGCCATGCAGC
>9_SRR1422294
GCGACTAGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCACATCTCACGACACGAGCTGACGACAGCCATGCAGC

我想得到这个:

>1_SRR1422294
ATCGTCAGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAT
>2_SRR1422294
CGTCAGACGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAG
>5_SRR1422294
CGTCAGACGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAG
>6_SRR1422250
TGTTCATGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCACATCTCACGACACGAGCTGACGACAGCCATGCAGC
>9_SRR1422294
GCGACTAGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCACATCTCACGACACGAGCTGACGACAGCCATGCAGC

请注意,并非所有的线都具有相同的数字,但是它们都具有相同的格式,这就是为什么我要使用正则表达式的原因。如果您可以解释如何读取您制作的代码真的很棒。

非常感谢!

如果整个文件都遵循该模式(以>开头的一些行,您只想要最后一个,然后是应始终打印的单行),则可以使用这样的东西:

awk '/^>/ { latest=$0 } !/^>/ { if (latest) { print latest; latest="" } print }'

如果该行以>开头,则记住它(存储在变量latest中),但未打印。如果该行不以>开头,则将其打印,但仅在首次打印了最近存储在latest中的内容后。

条件意味着即使连续有多个非>行,每条打印的>行也只会出现一次。由于您的示例数据不会发生这种情况,因此您可能不需要并发症,并且可以使用此简单的无条件版本:

awk '/^>/ { latest=$0 } !/^>/ { print latest; print }'

只需使用uniq命令与-w--check-chars=N)选项:

,可以轻松实现所需的结果。
cat testfile | uniq -w 3

输出:

>1_SRR1422294
ATCGTCAGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAT
>2_SRR1422294
CGTCAGACGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAG
>5_SRR1422298
CGTCAGACGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAG
>6_SRR1422294
TGTTCATGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCACATCTCACGACACGAGCTGACGACAGCCATGCAGC
>9_SRR1422294
GCGACTAGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCACATCTCACGACACGAGCTGACGACAGCCATGCAGC

-w, - check-chars = n
        nbsp; nbsp;    nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp》中的比较不超过行中的 n 字符

http://man7.org/linux/man-pages/man1/uniq.1.html


它将比较每行的第一个 n 字符,以决定重复行

尝试:如果您的数据与给定的sample input_file相同,那么以下可能会帮助您。

awk '/^>/{A=$0;next} {print A ORS $0;A=""}'  Input_file

这可能对您有用(gnu sed):

sed 'N;/^>.*n>/!P;D' file

在模式空间中读取两条线,如果第一行和第二行以>开头,则不会打印第一条行。

sed 'N;/^>.*nw/!D' file #(GNU sed)

n:将下一行阅读到模式空间中。
/>/2.* n W/!:如果第一行以">"开头,则删除第一行,而第二行不会以字母

开始

相关内容

  • 没有找到相关文章

最新更新