Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如果一行后面有一个以相同字符开头的行,如何删除该行?_Regex_Awk_Sed_Fasta_Reformat - Fatal编程技术网

Regex 如果一行后面有一个以相同字符开头的行,如何删除该行?

Regex 如果一行后面有一个以相同字符开头的行,如何删除该行?,regex,awk,sed,fasta,reformat,Regex,Awk,Sed,Fasta,Reformat,我需要一些关于sed或awks的帮助 如果一行后面有一个以相同字符开头的行(在本例中为>),如何删除该行 我举了一个例子: >1_SRR1422294 ATCGTCAGGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAT >2_SRR1422294 CGTCAGACGTAGGGTTGCGCTCGTTGCGGGACTTAACCCAACATCTCACGACACGAGCTGACGACAGCCATGCAG &g

我需要一些关于sed或awks的帮助

如果一行后面有一个以相同字符开头的行(在本例中为>),如何删除该行

我举了一个例子:

>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 }'

如果整个文件遵循该模式(以
开头的一些行,其中您只需要最后一行,后面是应始终打印的一行),则可以使用如下方式:

awk '/^>/ { latest=$0 } !/^>/ { if (latest) { print latest; latest="" } print }'
如果行以
开头,则会记住它(存储在变量
latest
中),但不会打印。如果行不是以
开头,则只在第一次打印最近存储在
latest
中的内容后才打印

条件表示即使一行中有多个非
行,每个打印的
行也只显示一次。由于这不会发生在示例数据中,因此您可能不需要复杂化,可以使用以下更简单的无条件版本:

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

只需使用带有
-w
-check chars=N
)选项的
uniq
命令,即可轻松获得所需的结果:

输出:

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

-w,--check chars=N
比较行中不超过N个字符



它将比较每行的前N个字符,以决定重复的行

只需使用
uniq
命令和
-w
--check chars=N
)选项即可轻松获得所需的结果:

输出:

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

-w,--check chars=N
比较行中不超过N个字符



它将比较每行的前N个字符,以决定重复的行

尝试:如果您的数据与给定的示例输入文件相同,则以下内容可能会在相同方面帮助您

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

尝试:如果您的数据与给定的示例输入文件相同,那么以下内容可能会在相同方面帮助您

awk '/^>/{A=$0;next} {print A ORS $0;A=""}'  Input_file
这可能适用于您(GNU-sed):

将两行读入图案空间,如果第一行和第二行以
开头,则不要打印其中的第一行

这可能适合您(GNU-sed):

sed 'N;/^>.*\n\w/!D' file #(GNU sed)
将两行读入图案空间,如果第一行和第二行以
开头,则不要打印其中的第一行

sed 'N;/^>.*\n\w/!D' file #(GNU sed)
N:将下一行读入模式空间
/^>*\n\w/!D:如果第一行以“>”开头,第二行不以字母开头,则删除第一行


N:将下一行读入模式空间
/^>*\n\w/!D:如果第一行以“>”开头,而第二行不是以字母开头的GNU grep:
grep-Poz'^>*\n[^>].*文件
GNU grep:
grep-Poz'^>*\n[^>].*文件