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”
。使用上面提到的代码,我可以删除整行。但是我还想删除上面的一行,这是它的标识符。是否总是在序列不可用的上面有一行需要删除?是的。例如