我尝试使用的脚本是:

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

明显有问题吗?

最佳答案

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)。

关于linux - 在awk中非法引用数组(我在弄清楚awk时遇到了麻烦),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14720898/

10-14 06:36