0
votes

Awk ou d'autres outils bioinformatiques pour filtrer VCF

J'essaie de filtrer certaines lignes dans un fichier VCF, voici un exemple de lignes: xxx

dise que je veux extraire des lignes avec amr_af plus grand que 0.5, mais ne pouvait pas comprendre comment utiliser des expressions régulières AWK pour effectuer un tel travail. Essayé vcftools , mais cela n'a pas fonctionné.


8 commentaires

Bienvenue pour, bien que vous ayez laissez-nous savoir que vous avez essayé peu de choses, veuillez également ajouter ces efforts dans votre question.


Aussi s'il vous plaît être clair que l'occurrence de la chaîne que vous souhaitez vérifier? Comme il n'est pas clair de votre question.


Le tag VCF est pour un format de fichier de calendrier; C'est sûrement autre chose?


Essayez awk '{divisé (0 $, x, / [\ t;] amr_af = /)} x [2]> 0.5' File.vcf


Il n'y a pas de lignes où amr_af est supérieur à 0,5 dans votre exemple.


@tripleee, true, je l'ai testé avec un exemple modifié pour la solution car aucune ligne n'est satisfaisante dans les exemples de OP.


@triplee merci! Cette ligne de code fonctionne bien, pourriez-vous s'il vous plaît expliquer brièvement comment cela fonctionne? VCF est le format qui affiche des informations de mutation dans la bioinformatique. Amr_af> 0.5 est juste une chose aléatoire sur ma tête, et oui il n'y a pas d'amr_af> 0,5 dans mes lignes d'exemple. Mes excuses!


Vcftools est remplacé par BCFTools, pour presque tous les problèmes liés à la VCF. C'est l'outil à utiliser, voir ma réponse.


3 Réponses :


1
votes

Pourriez-vous s'il vous plaît essayer suivi. XXX

Explication: Utilisation correspondant de awk pour correspondre Regex amr_af = chiffres.digits ou amr_af = chiffre et chaque fois que cette regex obtient des correspondances en ligne, il définit rstart et rlthongueur variables. && (et condition) Pour vérifier si la valeur Sous-chaîne de RSTART + 7 TO jusqu'à Rlength-7 La valeur est supérieure à 0,5 puis imprimez que ligne.


0 commentaires

1
votes

Vous pouvez diviser la ligne sur le champ que vous avez choisi et examiner si la valeur numérique de l'élément juste après la scission est supérieure à celle de votre seuil.

Plus de détails, diviser l'entrée oui, foo = = 2, bar = 0,23, baz = 1 sur , bar = donnera une matrice contenant oui, foo = 2 et 0,23, baz = 1 . Dans Awk, si vous comparez le deuxième élément à 0.2 , il sera simplement convertit autant que possible du début de la valeur en un numéro, puis effectuer une comparaison numérique.

Ainsi, xxx

devrait faire ce que vous voulez. Nous divisons la ligne en x et examinons la valeur numérique de x [2] .

le [\ t;] > dans la regex permet un onglet ou un point-virgule avant le nom du champ; Pour être parfaitement général, vous devriez peut-être même utiliser (^ | [\ t;]) pour permettre également le match de se produire au début de la ligne.

si vous voulez paramétrer Ceci, peut-être essayer xxx

rappel que AWK traite le script pour chaque ligne d'entrée de haut en bas, où chaque instruction de script a la forme

[< em> condition ] [ { action } ]

Comme les crochets indiquent, les deux parties sont Facultatif - si condition est manquant, l'action est prise inconditionnellement; Si action est manquant, il est par défaut à {imprimé $ 0} . Donc, notre script va d'abord diviser inconditionnellement la ligne, puis l'imprimer de manière conditionnelle si x [2] est plus grand que le seuil.

gnu awk peut diviser sur un séparateur de champ multi-caractères , afin que vous puissiez utiliser -f '[\ t;] amr_af =' aussi. xxx


2 commentaires

Merci beaucoup pour votre réponse rapide! Juste une question rapide: que si je veux extraire la valeur entre amr_af = et ; afr_af et imprimer la valeur numérique, en utilisant une expression régulière?


Cela devrait être facile à comprendre; Split deux fois. Vous pouvez également utiliser la liste Match () de la réponse de Ravindersingh13 et calculez les compensations à partir de RSTART et rlength pour déterminer les indices pour extraire la sous-chaîne mais Je trouve ça plutôt encombrant.



0
votes

en utilisant bcftools : xxx

Voir pour plus d'options de Manuels de BCFTools .


0 commentaires