2013-09-06 2 views
0

У меня есть некоторый код ниже:попытка использовать массив `A 'в скалярном контексте 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

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

Очень новый для кодирования в целом, так что я не уверен, что означает эта ошибка и почему я получили его. Не уверен, набрал ли я это достаточно ясно, но, надеюсь, у меня есть. Заранее спасибо!!! Эми

+0

Можете ли вы объяснить, как вы выбираете строки для 'ADupes.txt',' BDupes.txt' и 'mixdupes.txt'? – konsolebox

+0

Я добавил некоторую информацию, надеюсь, что вы ее поймете. Спасибо – AmyC

+0

В вашем BDupes.txt, почему вы включили «Elaine | B6 | P»? Когда в ADupes.txt вы не включили родителя. – konsolebox

ответ

0

У вас есть такие строки:

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

Добавить пробелы в них:

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

И Есть два экземпляра этого набора.

Также о вашей ошибке, это может быть потому, что вы A и B в алгоритмических выражениях, например.

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

Возможно, вы имели в виду countA и countB?

+0

спасибо Я добавил пробелы & ошибка все еще идет – AmyC

+0

@ user2428639 Я добавил обновление. – konsolebox

+0

Спасибо! это удалило ошибку :) – AmyC

Смежные вопросы