awk
ниже работает отлично, благодаря @ RavinderSingh13, если идентификатор в $4
(как в f) уникален. Однако большая часть моих данных похожа на f1
, где один и тот же идентификатор может появляться несколько раз. Я думаю, что это причина, почему awk
не работает, как ожидалось. Я добавил комментарий в строку, которую я не могу изменить, не вызывая сценарий прерывания. Каждая строка в f2
ищется и должна содержать идентификатор, в данном случае COL1A2
, но этот идентификатор не может быть отдельной записью. То есть идентификатор может появляться 5 раз, но каждая строка с этим в f2
ищется. Используя $4
in f1
в качестве идентификатора и читая каждое значение $1
, $2
и $3
в переменную min
и max
.
Затем $4
делится на _
в f2
и считывается в array
. Один и тот же идентификатор из f1
может появляться в нескольких строках f2
, однако каждая из них будет иметь уникальные значения $2
и $3
. Каждое значение в разбиении будет соответствовать $4
id в f1
. min
и max
должны соответствовать $1
из f2
и находиться между значениями $2
и $3
в f2
. Точное совпадение не требуется, скорее просто переменные min
или max
находятся в пределах $2
и $3
. Если это правда, то exon
печатается в $5
из f2
, если это не так, тогда intron
печатается в $5
. Большая часть этого работает, как и ожидалось, я просто не учел возможность нескольких приемов, и я не знаю, как это сделать. Спасибо:)
Например, используя содержимое f1
, где COL1A2
появляется 3 раза, каждая запись или строка ищется в f2
. В настоящее время, я считаю, что COL1A2
не является уникальным, в f2
не найдено совпадений, так как min
и max
не установлены для каждой записи или строки. Спасибо:).
awk с желаемым выходом
awk '
BEGIN{
SUBSEP=","
}
FNR==NR{
max[$1,$NF]=$3
min[$1,$NF]=$2
next
}
{
split($4,array,"_") # How do I change/modify this so it only looks a each line with this id `COL1A2` in it?
}
(($1,array[1]) in max){
if(($2>min[array[5],array[1]] && $2<max[array[5],array[1]]) || ($3>max[array[5],array[1]] && $3<max[array[5],array[1]])){
print array[5],array[1],min[array[5],array[1]],max[array[5],array[1]],"exon"
next
}
}
{
print $0,"intron"}' f f2
chr7 94024333 94024423 COL1A2_cds_0_0_chr7_94024344_f 0 + intron
chr7 94027049 94027080 COL1A2_cds_1_0_chr7_94027060_f 0 + intron
chr7 COL1A2 94027591 94027701 exon
awk с токовым выходом
.... }' f1 f2
chr7 94024333 94024423 COL1A2_cds_0_0_chr7_94024344_f 0 + intron
chr7 94027049 94027080 COL1A2_cds_1_0_chr7_94027060_f 0 + intron
chr7 94027683 94027718 COL1A2_cds_2_0_chr7_94027694_f 0 + intron
содержимое f single COL1A2 entry
chr7 94027591 94027701 COL1A2
содержимое f1 multiple COL1A2 entry, this is most of the actual data, very few are single entries though there are some
chr7 94027591 94027701 COL1A2
chr7 94027799 94027811 COL1A2
chr7 94030799 94030847 COL1A2
содержимое f2 always the same format
chr7 94024333 94024423 COL1A2_cds_0_0_chr7_94024344_f 0 +
chr7 94027049 94027080 COL1A2_cds_1_0_chr7_94027060_f 0 +
chr7 94027683 94027718 COL1A2_cds_2_0_chr7_94027694_f 0 +