Como extrair linhas começar com “#” ou “chr1”

1

Eu tenho um arquivo parecido com:

##Comment A
##Comment B
#Important header
chr1 content a
chr2 content b
chrX content x

Eu gostaria de extrair a linha 3 e 4 para um novo arquivo, que começa com um # (não ##) ou "chr1".

#Important header
chr1 content a

Eu tentei fazer

grep "^[^##]"

mas isso excluirá a linha com apenas um # nela também. Eu acho que sempre posso fazer isso em duas etapas, mas gostaria de receber melhores soluções! Muito obrigado.

    
por Helene 09.05.2017 / 01:53

2 respostas

4

Como sobre OR os dois padrões?

$ grep '^#[^#]\|^chr1' file
#Important header
chr1 content a

Como alternativa, a forma -e é especificada por POSIX )

$ grep -e '^#[^#]' -e '^chr1' file
#Important header
chr1 content a
    
por 09.05.2017 / 02:01
1

Sempre há outra solução. Usando awk , você pode fazer isso seguindo o script:

awk '{if( ($0~/^#/ && $0!~/^##/) || $0~/^chr1/){print $0}}' file

Quando a primeira parte parece se a linha começar com # , mas não ## e segunda parte começa a linha se iniciar com chr1 , em seguida, imprimir o resultado fora.

    
por 09.05.2017 / 08:36