我需要在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/!:如果第一行以">"开头,则删除第一行,而第二行不会以字母