Uma linha única:
zcat my.vcf.gz | perl -ane '$ x = 0; para $ y (split (",", $ F [4])) {$ x = 1 if length ($ y) >length ($ F [3])} print if / ^ # / || $ x '
ou de maneira equivalente
zcat my.vcf.gz | perl -ane '$ x = 0; map {$ x = 1 if length>length ($ F [3])} split (",", $ F [4]); imprimir if / ^ # / || $ x'
Para operações VCF simples, geralmente recomendo escrever um script. Isso pode ser mais rápido do que aqueles que usam bibliotecas pesadas. Com um script, você analisa apenas os campos de seu interesse; a maioria das bibliotecas analisa desnecessariamente todos os campos.
Em uma nota relacionada, eu recomendo não para decompor sites multi-alélicos, a menos que seja necessário. A decomposição é complicada, torna o VCF mais difícil de analisar e entender e pode ser uma fonte potencial de erros. Aqui está um exemplo:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT S1 S2 S3 S411 101. GCGT G, GCGA, GTGA, CCGT 199 PASS. GT 0/1 1/2 2/3 2/4
vt decompor + normalizar produz o seguinte VCF:
#CHROM POS ID REF ALT QUAL FORMATO DE INFORMAÇÕES DO FILTRO S1 S2 S3 S411 101. GCGT G 199 PASS. GT 0/1 1 /. ./. ./.11 101. G C 199 PASS. GT 0 /. ./. ./. ./111 102. CGT TGA 199 PASS. GT 0 /. ./. ./1 ./.11 104. T A 199 PASS. GT 0 /. ./1 1 /. 1 /.
Em teoria, você pode reconstruir o VCF original a partir desta saída. No entanto, é muito desafiador para um programa fazer isso. Quando você calcula a frequência do alelo linha por linha, este VCF fornecerá resultados errados. bcftools norm -m-
substitui "." com "0". Você pode obter uma frequência de alelo ALT correta da saída do bcftools, mas uma frequência de alelo REF incorreta. Além disso, vt também é imperfeito porque "CGT => TGA" não é decomposto.
Minha saída preferida é:
#CHROM POS ID REF ALT QUAL INFO FORMATO DO FILTRO S1 S2 S3 S411 101. GCGT G, <M> 0. . GT 0/1 1/2 2/2 2/211 101. G C, <M> 0. . GT 0/2 2/0 0/0 0/111 102. C T, <M> 0. . GT 0/2 2/0 0/1 0/011 104. T A, <M> 0. . GT 0/2 2/1 1/1 1/0
Aqui, usamos um alelo simbólico <M>
para representar "outro alelo ALT". Você pode calcular a frequência do alelo olhando para uma linha e não vai confundir outros alelos ALT com REF. O bgt pode produzir esse VCF indiretamente. No entanto, ele descarta todas as INFO, portanto, também não é uma solução prática.
Em resumo, é muito difícil decompor sítios multi-alélicos. Quando você faz a decomposição errada, suas análises downstream podem ser imprecisas. A decomposição deve ser usada com cuidado.