awk搜索文件可能包含ID为

时间:2019-01-17 20:17:36

标签: awk

如果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相匹配。 f1min必须与max的{​​{1}}相匹配,并且必须在$1中的f2$2值之间。不需要完全匹配,而仅需要$3f2变量位于minmax之内。如果为真,则在$2的{​​{1}}中打印$3,如果不是,则以exon打印$5。大部分工作都按预期进行,我只是没有考虑多个肠的可能性,并且不确定如何调整它。谢谢:)

例如,使用f2的内容(其中intron出现3次),在$5中搜索每个条目或每一行。目前,我相信由于f1不是唯一的,因此在COL1A2中发现不匹配,因为没有为每个条目或行设置f2COL1A2。谢谢:)。

希望获得预期的输出结果

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

0 个答案:

没有答案