remove linhas de um arquivo vcf.gz com o comando awk

0

Acabei de fazer uma pergunta sobre a filtragem de linhas com um valor específico em uma coluna específica.

Se eu agora quiser excluir linhas com um valor específico em uma coluna específica. Como eu faço isso?

Por exemplo delete linhas com 1/1 na coluna 12345 no arquivo file.vcf.gz e coloque outras linhas em um novo arquivo chamado newfile.vcf.gz

Por exemplo,

#CHROM      POS         ALT     12345   
1           345632      T       0/1:4,4:8:99:105,0,106
4           032184      C       1/1:46,9:55:99:99,0,1222
6           843290      A       0/1:67,20:87:99:336,0,1641

Resultado esperado:

1           345632      T       0/1:4,4:8:99:105,0,106
6           843290      A       0/1:67,20:87:99:336,0,1641
    
por Sanna 23.11.2016 / 16:16

2 respostas

0

Embora este seja apenas o inverso de sua última pergunta

Aqui está.

zcat file.vcf.gz | awk '$4 !~ /^1\/1/' | gzip -c > new.vcf.gz

O ! faz corresponder se $ 4 não é esse padrão. No entanto, isso não remove a linha de cabeçalho. Para remover a linha de cabeçalho, você pode adicionar head -n +2 no pipeline.

zcat file.vcf.gz | head -n +2 |awk '$4 !~ /^1\/1/' | gzip -c > new.vcf.gz
    
por 23.11.2016 / 16:31
0

Para excluir linhas, prefiro sed :

zcat file.gz | sed ':1/1:d' | gzip -c > new_file.gz

Alternativamente, faça um inverso grep , ignorando as linhas que correspondem:

zgrep -v '1/1' file.gz | gzip -c > new_file.gz

Para excluir também o cabeçalho, crie outro intermediário sed ou remoção tail , ou seja,

zcat file.gz | sed -e ':1/1:d' -e '1d'  | gzip -c > new_file.gz
zgrep -v '1/1' file.gz | tail -n +2 | gzip -c > new_file.gz
    
por 23.11.2016 / 16:31

Tags