如果awk
(如f)中的id是唯一的,则@@ RavinderSingh13可以使下面的$4
完美地工作。但是,我的大多数数据都像f1
一样,其中相同的ID可能会出现多次。我认为这就是awk
无法正常工作的原因。我在一行中添加了一条注释,该注释不能更改而不会导致脚本中止。搜索f2
中的每一行,并且必须包含id,在这种情况下为COL1A2
,但该id不能是单个条目。该id可能会出现5次,但是会搜索f2
中的每行。使用$4
中的f1
作为ID,并将每个$1
,$2
和$3
的值读入变量min
和{{1 }}。
然后max
在$4
中的_
上拆分并读入f2
。来自array
的相同ID可能出现在f1
的多行中,但是每行将具有唯一的f2
和$2
值。拆分中的每个值都将与$3
中的$4
ID相匹配。 f1
和min
必须与max
的{{1}}相匹配,并且必须在$1
中的f2
和$2
值之间。不需要完全匹配,而仅需要$3
或f2
变量位于min
和max
之内。如果为真,则在$2
的{{1}}中打印$3
,如果不是,则以exon
打印$5
。大部分工作都按预期进行,我只是没有考虑多个肠的可能性,并且不确定如何调整它。谢谢:)
例如,使用f2
的内容(其中intron
出现3次),在$5
中搜索每个条目或每一行。目前,我相信由于f1
不是唯一的,因此在COL1A2
中发现不匹配,因为没有为每个条目或行设置f2
和COL1A2
。谢谢:)。
希望获得预期的输出结果
f2
了解当前输出
min
f的内容 max
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
f1的内容 .... }' 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
single COL1A2 entry
f2的内容 chr7 94027591 94027701 COL1A2
multiple COL1A2 entry, this is most of the actual data, very few are single entries though there are some