基本上我的代码会遍历整个文件,然后不会打印出最后两行,因为当它找不到另一个“P”时没有什么可以让它继续运行这是我的代码:
BEGIN{
FS= "|"
countA=CountB=0;
}
{
id=substr($2,1,1);
++file[id]
if ($3 == "P"){
#      print "message 1", countB, countA;
  if(countB==0){
    for(dupes in B){
      print B[dupes] > "Bdupes.txt"
      print dupesB[dupes];
      print "ouputted logs for B";
      }
    }
  else if(countA==0){
    for(dupes in A){
      print A[dupes] > "Adupes.txt"
      }
    }
  else if(countA==countB){
    i=1
    while(i<countA){
      print A[i] > "mixdupes.txt"
      print B[i] > "mixdupes.txt"
      i++;
      }
    }
  else if(countA<countB && countA!=0){
    i=1
    while(i<(countA+1)){
      print A[i] > "mixdupes.txt"
      print B[i] > "mixdupes.txt"
      i++;
      }
    i=countA+1
    while(i<(countB+1)){
      print B[i] > "Bdupes.txt"
      i++;
      }
    }
  else if(countB<countA && countB!=0){
    i=1
    k=countB + 1;
    while(i<k){
      print A[i] > "mixdupes.txt"
      print B[i] > "mixdupes.txt"
      i++;
      }
    j=countB+1
    while(j<(countA+1)){
      print A[j] > "Adupes.txt"
      j++;
      }
    }
  if(id == "A"){
    A[1]=$0
    countA=1;
    countB=0;
    }
  else if (id == "B"){
    B[1]=$0
    countA=0;
    countB=1;
    }
  }
else if($3 == "C"){
  if(id=="A"){
    countA++;
    A[countA]=$0
    }
  else if(id == "B"){
    countB++;
    B[countB]=$0
    }
  }
else if($3 == "U"){
  print $0 > id "unique.txt";
  }
}
END{
for (file_id in file)
print file_id ":", file[file_id]
}
这是我的文件:
Name|ID|DDStatus|ParentID
Jon|A4|U|
Bob|B5|U|
Phil|A5|P|
Phil|B4|C|A5
Amy|A1|P|
Amy|A2|C|A1
Amy|B1|C|A1
Gareth|A3|P|
Gareth|B2|C|A3
Gareth|B3|C|A3
Elaine|B6|P|
Elaine|B7|C|B6
所以我的代码错过了最后两个:
 Elaine|B6|P|
 Elaine|B7|C|B6
因为在此之后它找不到另一个“P”。无论如何,我可以确保它在我的 END 程序之后一直运行到最后吗?我想要5个文件。
- 显示文件 A 中唯一行的一个。(您可以从 ID 字段的开头从文件 A/B 中分辨出它。
 - 一个显示文件 B 中的唯一行
 - A plus B (P & C) 的父母和孩子
 - 如果两者都来自文件 A,则父母和受骗者,或者仅来自 AAB 的受骗者
 - 如果两者都来自文件 B,则父母和受骗者,或者如果其 ABB 则只是受骗者
 
所以我的 Bdupes 文件缺少两个 Elaine,因为代码没有处理最后两行。
复制:
Gareth|B3|C|A3
什么时候应该是这样的:
Gareth|B3|C|A3
Elaine|B6|P|
Elaine|B7|C|B6
我的代码基本上找到了作为父 P 的第一条记录,但是当涉及到文件的末尾时,它不会继续,因为没有留下“P”。这就是为什么两个伊莱恩失踪了。
我现在需要知道如何让 AWK 处理最后两行?
TIA