尝试在标量上下文awk错误中使用数组'A'?

时间:2013-09-06 10:12:36

标签: awk

我有以下代码:

BEGIN{

FS= "|"
countA=CountB=0;

}

{

id=substr($2,1,1);
++file[id]




if ($3 == "P")
    {
   if(countB==0){
    for(dupes in B)
    print B[dupes] > "Bdupes.txt"
    }
}

else if(countA==0){
   for(dupes in A){
    print A[dupes] > "Adupes.txt"
    }
}

else if(countA==countB){
   i=1
    while(i<countA){

     printA[i] > "mixdupes.txt"
     printB[i] > "mixdupes.txt"

     }
}

if(A<B && A!=0){

   i=1
    while(i<(A+1)){
     printA[i] > "mixdupes.txt"
     printB[i] > "mixdupes.txt"
     }

   i=A+1
    while(i<(B+1)){
     print B[i]> "Bdupes.txt"


  if(id=="A"){
    A[1]=$0
    countA=1;
    countB=0;

    }

  else if (id=="B"){
    B[1]=$0
    countA=0;
    countB=1;
    }
  }
elseif ($3 == "C")
{

   if(id=="A"){
    countA++;
    A[countA]=$0
    }

else if(id=="B"){
   countB++;
    B[countB]=$0
    }

}
}
}
END{

for (file_id in file)
print file_id ":", file[file_id]

}

但是我收到了错误:

   awk: testking123.awk:81: (FILENAME=sample.txt FNR=1) fatal: attempt to use array `A' in a scalar context

我的意见是:

Name|ID (file A or File B)|DDStatus(Parent or Child)|ParentID
Jon|A4|U|
Bob|B5|U|
Amy|A1|P|
Amy|A2|C|A1
Amy|B1|C|A1
Gareth|A3|P|
Gareth|B2|C|A3
Gareth|B3|C|A3
Phil|A5|P|
Phil|B4|C|A5
Elaine|B6|P|
Elaine|B7|C|B6

&安培;预计的出局将是:

ADupes.txt(如果两者都来自档案A,则为父母和子女(孩子),如果是AAB,则为父亲和孩子)

Amy|A2|C|A1

BDupes.txt(如果两者都来自档案B,则为父母和子女(儿童),如果是ABB,则为父亲和孩子)

Gareth|B3|C|A3
Elaine|B6|P|
Elaine|B7|C|B6

mixdupes.txt(文件A + B中的Parents&amp; Dupes(Children)

Amy|A1|P|
Amy|B1|C|A1
Gareth|A3|P|
Gareth|B2|C|A3
Phil|A5|P|
Phil|B4|C|A5

一般来说编码很新,所以我不确定这个错误意味着什么,为什么我得到它。不确定我是否已将其打印得足够清楚,但希望我有。提前致谢!!! 艾米

1 个答案:

答案 0 :(得分:0)

你有这样的行:

 printA[i] > "mixdupes.txt"
 printB[i] > "mixdupes.txt"

为他们添加空格:

 print A[i] > "mixdupes.txt"
 print B[i] > "mixdupes.txt"

该集合有两个实例。

同样关于您的错误,可能是因为您在算法表达式中使用AB,例如

    if (A < B && A != 0) {
        while (i < (A + 1)) {
        i = A + 1
        while (i < (B + 1)) {

也许您的意思是countAcountB