在awk中非法引用数组(我无法搞清楚awk)

时间:2013-02-06 03:17:19

标签: linux unix awk

我尝试使用的脚本是:

cat gatk_probes.interval_list |
awk '
BEGIN{
   OFS="\t";
   print "#CHR\tBP1\tBP2\tID"
}
{
   split($1,a,":");
   chr=a[1];
   if (match(chr,"chr")==0) {
      chr="chr"chr
   }
   split(a[2],b,"-");
   bp1=b[1];
   bp2=bp1;
   if (length(b) > 1) {
      bp2=b[2]
   }
   print chr,bp1,bp2,NR
}' > ./EXOME.targets.reg

我收到错误:

awk: line 1: illegal reference to array b

有什么明显的错误吗?

1 个答案:

答案 0 :(得分:3)

length(b)搞砸了你,显然不是每个awk的实现都支持它。你可以这样做:

BEGIN
{
    OFS="\t"; 
    print "#CHR\tBP1\tBP2\tID"
}
{
    split($1,a,":"); 
    chr=a[1]; 
    if (match(chr,"chr")==0) 
    {
        chr="chr"chr
    }
    blength = split(a[2],b,"-"); 
    bp1=b[1]; 
    bp2=bp1; 
    if (blength > 1) 
    {
        bp2=b[2]
    }
    print chr,bp1,bp2,NR
}

split返回数组中的元素数(在本例中为b)。