-1
votes

Extrait complexe de toutes les entrées de lignes à base de modèle de chaîne à l'aide de AWK, SED ou R

J'ai un fichier de 7 colonnes comme ceci: xxx

J'essaie de trouver une solution à l'aide de Grep, SED, AWK ou R. à partir d'un fichier texte séparé de l'espace que j'ai besoin d'extraire Tout dans les cas dans la colonne 6 (la colonne info_tags_use_to_notate ) où la valeur 1 se produit après une virgule.

Chaque fois qu'un 1 se produit, les informations que je dois conserver pour chaque instance est, Utilisation de la rangée 1 à titre d'exemple, 1: 154834911 (1.2e-05,1) . Ces informations correspondent aux informations SNP, c'est-à-dire Numéro de chromosome: position de base (valeur P, annotation = 1) .

Si plus d'une instance d'un 1 se produit dans une rangée donnée. J'ai besoin de chaque instance et correspondant aux informations SNP signalées. Ainsi, en utilisant la rangée 2 comme exemple, deux instances seraient signalées 3: 53708850 (1.68E-06,1) | 3: 53711735 (8.52e-07,1) .

Si possible, cette information extraite pour chaque ligne serait annexée dans une nouvelle colonne.

Chaque entrée de la colonne 6 est séparée par | . Il serait utile d'utiliser le | comme délimiteur dans la nouvelle colonne si plusieurs entrées sont rapportées pour une rangée donnée.

La sortie de la dernière colonne de la sortie ci-dessus ressemblerait à ce xxx

Veuillez noter que les informations figurant dans les colonnes 5, 6 et 7 sont très. Semblable qui peut être déroutant.

Toute suggestion serait grandement appréciée.


0 commentaires

4 Réponses :


1
votes

Perl fonctionnera bien ici:

perl -lape '$_=join" ",@F,$.==1?"NewCol":join"|",grep{/,1\)/}split/[|]/,$F[5]' file


0 commentaires

1
votes

à l'aide de R lisez dans myfile code> comme dans la ligne de sortie commentée, puis utilisez gsub pour supprimer les pièces qui ne souhaitaient pas mettre ce qui est laissé dans une nouvelle colonne. Les données utilisées sont affichées à la fin.

Lines <- "
ID ANNOTATION OR PVAL VAR_INFO INFO_TAGS_USED_TO_ANNOTATE INFO_TAGS_USED_TO_ANNOTATE
1 ANN1 1.66 0.0028 1:154837796(1.12e-06,0) 1:154834092(1.49e-05,0)|1:154834911(1.2e-05,1)| 1:155008318(0.000201,0)|1:155008973(0.000177,0)|
1 ANN1 1.66 0.0028 3:53707953(1.21e-06,0) 3:53708850(1.68e-06,1)|3:53711735(8.52e-07,1)| |3:53765419(0.0021,0)|
1 ANN1 1.66 0.0028 12:109966662(6.723e-06,0) 12:109888779(3.01e-05,0)|12:109889704(5.242e-05,0)|12:109890955(4.79e-05,0)| 12:110105520(NA,0)|12:110132792(0.00015,0)|12:110155571(3.93e-05,0)|
"


0 commentaires

1
votes

Utilisation de n'importe quel awk dans n'importe quelle coquille sur chaque boîte Unix: xxx


0 commentaires

1
votes

Ceci pourrait fonctionner pour vous (GNU SED): R

sed -E 'h;s/\S+/\n&\n/6;s/.*\n(.*)\n.*/\1/;s/[^,]+,([^1)]|[^)]{2,})\|//g;s/\|$//;1s/.*/newcol/;H;g;s/\n/ /' file


0 commentaires