2

私が使用しようとしているスクリプトは次のとおりです。

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

明らかに何かが間違っていますか?

4

1 に答える 1

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)を返します。

于 2013-02-06T04:21:22.403 に答える