0

我在下面有一些代码:

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 的父母和欺骗(儿童)

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

一般来说,编码很新,所以我不确定这个错误是什么意思以及为什么我得到它。不确定我是否已经清楚地输入了这个,但希望我有。提前致谢!!!艾米

4

1 回答 1

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

于 2013-09-06T10:24:53.023 回答