У меня есть одна таблица связанных результатов маркера и одна таблица маркеров болезни. Оба файла имеют заголовки.Perl выводит слишком много столбцов
Это то, что связано маркер таблица выглядит следующим образом:
snps_BCG24 gene_BCG24 statistic_BCG24 pvalue_BCG24 FDR_BCG24 beta_BCG24 pair SharedOrUnique_BCG24 PercentileRank_BCG24 chr cM hg19pos Diseasegene
rs11203184 C21orf128 -9.425704 4.008530e-12 2.501741e-05 -0.9199033 rs11203184_C21orf128 SharedSignalMO7 1.484874e-06 21 63.4452 43526430 notDiseasegene
rs11203184 C2CD2 2.290434 2.684575e-02 8.559484e-01 0.3114964 rs11203184_C2CD2 UniqueSignalBCG24 2.906046e-01 21 63.4452 43526430 notDiseasegene
Это то, что таблица маркер заболевания выглядит следующим образом:
Chr hg19Pos hg18Pos rsID SNPname hg19UCSC hg18UCSC startLoc endLoc
1 1247494 1237357 rs12103 var_chr1_1247494 chr1:1247494-1247494 chr1:1237357-1237357 1147494 1347494
1 2502780 2492640 rs6667605 var_chr1_2502780 chr1:2502780-2502780
Если ассоциированные маркеры и маркеры заболевания находятся на той же хромосомы (связанный столбец 9 == столбец болезни 0, соответственно), я тогда хочу проверить, находится ли позиция моего ассоциированного маркера (столбец 11 в связанной таблице) в начальной и конечной позиции маркеров болезни (столбцы 7 и 8 в таблица болезни).
Если мои соответствующие маркеры находятся на этом расстоянии, я хочу пометить соответствующий маркер "inLocus"
, в противном случае оставьте пустым. Результатом вывода будет файл с двумя столбцами с разделителями табуляции: 1) имя каждого связанного маркера в том же порядке, что и соответствующая таблица маркеров 2) inLocus
, или пустое состояние для каждого маркера в соответствующей таблице маркеров.
Я написал для этого сценарий perl, но вместо вывода двух столбцов (один для ассоциированного имени маркера и один для статуса локуса) он выводит один столбец с именем маркера и различным числом столбцов для части "inLocus"
- и не всегда одинаковое количество столбцов. Я не знаю, какой маркер действительно "inLocus"
, потому что каждый выходной столбец иногда имеет другой статус. Что мне нужно изменить в моем коде, чтобы каждый маркер в моем списке получил окончательный лейбл inLocus
? Будет ли изменение пустым для печати "notLocus"
изменить ситуацию? Вот мой код:
#!/usr/bin/perl
use strict;
use warnings;
my $data_file1="/Users/Me/AssociatedMarkers.txt";
my $data_file2="/Users/Me/DiseaseMarkers.txt";
open(Main, $data_file1) || die("Could not open file!");
my $Line = 0;
my $Line1 = 0;
my @main = 0;
my @loci = 0;
#Generate output files
open(Result, ">AssociatedMarkersInLocus.txt");
print Result "SNP\tinLocus?\n";
foreach $Line (<Main>) {
#remove new line character
open(DiseaseMarkers, $data_file2) || die("Could not open file!");
$Line =~ s/[\n\r]//g;
@main = split(/\t/,$Line);
print Result "@main[0]";
foreach $Line1 (<DiseaseMarkers>) {
$Line1 =~ s/[\n\r]//g;
@loci = split(/\t/,$Line1);
if ((@main[9] eq @loci[0])&&(@main[11]>[email protected][7])&&(@main[11]<@loci[8])){
print Result "\tinlocus";
close(DiseaseMarkers);
}
}
print Result "\n";
}
close(Result);
#Report completion
print "Program AssociatedMarkers finished. \n";
Вот результаты я получаю:
SNP inLocus?
MarkerNameHeader
MarkerName1 inLocus inLocus inLocus
MarkerName2
MarkerName3 inLocus
MarkerName4 inLocus inLocus inLocus
MarkerName5 inLocus
Вот формат результатов я на самом деле нужно:
MarkerName1 inLocus
MarkerName2
MarkerName3
MarkerName4 inLocus
С другой стороны, если кто-то знает, как чтобы добавить информацию inLocus в мой существующий файл AssociatedMarkers, это было бы еще лучше!
без ввода пробы, мы не можем попробовать что-нибудь. – choroba
Спасибо, я добавил примеры обоих входных файлов к моему вопросу. – user3482899