我有一个像小例子的文件: 小例子:
>ENSG00000004142|ENST00000003607|POLDIP2|||2118
Sequence unavailable
>ENSG00000003056|ENST00000000412|M6PR|9099001;9102084|9099001;9102551|2756
CCAGGTTGTTTGCCTCTGGTCGGAAAGGGAAACTACCCCTGCTTCCACTCTGACAGCAGA
但我有太多"序列不可用"。我想摆脱那些成绩单。结果将是这样的:
>ENSG00000003056|ENST00000000412|M6PR|9099001;9102084|9099001;9102551|2756
CCAGGTTGTTTGCCTCTGGTCGGAAAGGGAAACTACCCCTGCTTCCACTCTGACAGCAGA
我尝试使用
过滤掉bash中的那些部分grep -A 2 "Sequence" your.fa | grep -v "\-\-" | sed -n '/Sequence/!p' > new.fa
但它只是删除了#34;序列不可用"但不是它的标题(该行以每个序列上方的">"
开头,这是每个序列的标识符)
如何在bash或python中过滤掉它们?
答案 0 :(得分:2)
假设应删除包含$ sed '$!N;/\nSequence unavailable$/d;P;D' input
的行以及上面的行,可以使用此sed:
$!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
基本上它通过在模式空间中读取两条线来工作,然后打印顶部的一条线,并将其从模式空间中移除,因此将当前线留在模式空间中,这导致总是落后一行:
;D
上面的工作在GNU sed中,可能需要更改;$!D;q
{{1}}以使其与严格的POSIX sed一起工作,否则会有无限循环。