o awk geralmente é mais fácil de ler e entender:
Aqui está um programa simples que escreve por padrão, e alterna um "wewrite" para "0" (= off, não vamos escrever) quando ele vê uma linha onde a primeira palavra é "gene", e coloca de volta quando ele vê uma linha onde a primeira palavra é "CDS" ou "mRNA":
awk '
BEGIN { weprint=1 }
( $1 == "gene" ) { weprint=0 }
( $1 == "CDS" ) || ( $1 == "mRNA" ) { weprint=1 }
( weprint == 1) { print $0 ;}
' file_to_read
BEGIN é feito antes de qualquer linha ser lida.
Os outros ( test ) { action if test successful }
são analisados para cada linha de entrada (... a menos que uma ação contenha next
, que então ignoraria o restante deles e, em vez disso, iria buscar a próxima linha de entrada)
Isso só imprimirá seções "CDS" e "mRNA" e não "gene"
Isso poderia ser "golfed" (por exemplo, a ação padrão para um 'teste' bem sucedido é imprimir $ 0, então você poderia ter apenas ( weprint == 1)
como a última linha, mas seria menos claro de entender, imo ...)