J'ai un fichier de 7 colonnes comme ceci: 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 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, 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 Si possible, cette information extraite pour chaque ligne serait annexée dans une nouvelle colonne. P> Chaque entrée de la colonne 6 est séparée par La sortie de la dernière colonne de la sortie ci-dessus ressemblerait à ce p> Veuillez noter que les informations figurant dans les colonnes 5, 6 et 7 sont très. Semblable qui peut être déroutant. P> Toute suggestion serait grandement appréciée. p> p> info_tags_use_to_notate code>) où la valeur 1 se produit après une virgule. p>
1: 154834911 (1.2e-05,1) code>. Ces informations correspondent aux informations SNP, c'est-à-dire
Numéro de chromosome: position de base (valeur P, annotation = 1) code>. P>
3: 53708850 (1.68E-06,1) | 3: 53711735 (8.52e-07,1) Code>. P>
| code>. Il serait utile d'utiliser le
| code> comme délimiteur dans la nouvelle colonne si plusieurs entrées sont rapportées pour une rangée donnée. p>
4 Réponses :
Perl fonctionnera bien ici:
perl -lape '$_=join" ",@F,$.==1?"NewCol":join"|",grep{/,1\)/}split/[|]/,$F[5]' file
à 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)|
"
Utilisation de n'importe quel awk dans n'importe quelle coquille sur chaque boîte Unix:
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