Python 在bash中过滤文本文件的某些部分时出现问题

Python 在bash中过滤文本文件的某些部分时出现问题,python,bash,Python,Bash,我有一个类似于小示例的文件: 小例子: >ENSG00000004142|ENST00000003607|POLDIP2|||2118 Sequence unavailable >ENSG00000003056|ENST00000000412|M6PR|9099001;9102084|9099001;9102551|2756 CCAGGTTGTTTGCCTCTGGTCGGAAAGGGAAACTACCCCTGCTTCCACTCTGACAGCAGA 但我有太多的“序列不可用”。我想扔掉

我有一个类似于小示例的文件: 小例子:

>ENSG00000004142|ENST00000003607|POLDIP2|||2118
Sequence unavailable
>ENSG00000003056|ENST00000000412|M6PR|9099001;9102084|9099001;9102551|2756
CCAGGTTGTTTGCCTCTGGTCGGAAAGGGAAACTACCCCTGCTTCCACTCTGACAGCAGA
但我有太多的“序列不可用”。我想扔掉那些成绩单。结果是这样的:

>ENSG00000003056|ENST00000000412|M6PR|9099001;9102084|9099001;9102551|2756
CCAGGTTGTTTGCCTCTGGTCGGAAAGGGAAACTACCCCTGCTTCCACTCTGACAGCAGA
我尝试使用

grep -A 2 "Sequence" your.fa | grep -v "\-\-" | sed -n '/Sequence/!p' > new.fa
但它只是删除了“Sequence unavailable”(序列不可用),而不是它的标题(在每个序列上方的行以
“>”
开头,它是每个序列的标识符)


如何在bash或python中过滤掉它们?

假设包含
序列不可用的行以及上面的行应该被删除,可以使用以下sed:

$ sed '$!N;/\nSequence unavailable$/d;P;D' input
基本上,它的工作原理是一次将两行读入模式空间,然后打印最上面的一行,然后将其从模式空间中删除,从而将当前行保留在模式空间中,这会导致始终落后一行:

$!N;                               # Append Next line to pattern space unless
                                   # there are no more lines
    /\nSequence unavailable$/d     # Delete whole pattern space if regex is matched
                               P;  # Print first line of pattern space
                                 D # Delete first line of pattern space

以上在GNU sed中工作,可能需要更改
;D
用于
;$!Dq
要使用严格的POSIX sed,否则将有一个无止境的循环。

假设包含
序列不可用的行以及上面的行都应该删除,可以使用此sed:

$ sed '$!N;/\nSequence unavailable$/d;P;D' input
基本上,它的工作原理是一次将两行读入模式空间,然后打印最上面的一行,然后将其从模式空间中删除,从而将当前行保留在模式空间中,这会导致始终落后一行:

$!N;                               # Append Next line to pattern space unless
                                   # there are no more lines
    /\nSequence unavailable$/d     # Delete whole pattern space if regex is matched
                               P;  # Print first line of pattern space
                                 D # Delete first line of pattern space

以上在GNU sed中工作,可能需要更改
;D
用于
;$!Dq
要使用严格的POSIX sed,否则将有一个无休止的循环。

如果要删除整行,请使用
grep-v“Sequence unavailable”
。使用上述代码,我可以删除整行。但是我还想删除上面的一行,这是它的标识符。是否总是在
序列不可用的上面有一行需要删除?是的。例如,如果要删除整行,请使用
grep-v“Sequence unavailable”
。使用上面提到的代码,我可以删除整行。但是我还想删除上面的一行,这是它的标识符。是否总是在
序列不可用的上面有一行需要删除?是的。例如