Awk 从数据文件中删除所选行

Awk 从数据文件中删除所选行,awk,Awk,这个问题是我之前的文章“从正则表达式中选择数字”的延续 下面是前一篇文章中发布的示例数据 DONOR ACCEPTORH ACCEPTOR atom# res@atom atom# res@atom atom# res@atom %occupied distance angle | 4726 59@O12 | 1487 19@H12 1486 19@O12

这个问题是我之前的文章“从正则表达式中选择数字”的延续

下面是前一篇文章中发布的示例数据

          DONOR         ACCEPTORH      ACCEPTOR           
    atom#  res@atom   atom#  res@atom atom#  res@atom %occupied  distance       angle        
  |  4726   59@O12 |  1487    19@H12  1486    19@O12 |  85.66  2.819 ( 0.18)  21.85 (12.11)        
  |  1499   19@O15 |  1730    22@H12  1729    22@O12 |  83.15  3.190 ( 0.31)  22.36 (12.73)        
  |  1216   16@O22 |  1460    19@H22  1459    19@O22 |  75.74  2.757 ( 0.14)  24.55 (13.66)        
  |  4232   53@O25 |  4143    52@H24  4142    52@O24 |  74.35  2.916 ( 0.25)  28.27 (13.26)        
  |  3683   46@O16 |  4163    52@H13  4162    52@O13 |  73.78  2.963 ( 0.29)  23.65 (14.14)        
  |  4162   52@O13 |  4079    51@H12  4078    51@O12 |  73.68  2.841 ( 0.19)  21.25 (11.87)        
  |  3764   47@O16 |  3825    48@H26  3824    48@O26 |  70.52  2.973 ( 0.28)  26.88 (13.14)        
  .
  .
  The lines goes few thousands.
我厌倦了Fredirk的代码,它可以很好地选择行。好吧,现在我想把这个想法推广到我真正的问题上

我的数据文件中的$3(第3个字段)和$6(第6个字段)表示“数字分子”,其排列如下:

   1    2   3   4   5   6   7       8

   9    10  11  12  13  14  15      16
  17    18  19  20  21  22  23      24
  25    26  27  28  29  30  31      32
  33    34  35  36  37  38  39      40
  41    42  43  44  45  46  47      48
  49    50  51  52  53  54  55      56

  57    58  59  60  61  62  63      64 
由上述数字组成的任何对实际上表示数据文件中每行的第3和第6字段中的对

我想要的是选择仅由排列在上述顺序最外层行的数字组成的对

 In short, ANY PAIRS made by only the numbers  (1 2 3 4 5 6 7 8   57 58 59 60 61 62 63 64   1 9 17 25 33 41 49 57   8 16 24 32 40 48 56 64) are need to be deleted.
我不知道如何在awk代码中编写循环来选择这些对并直接删除这些行


我想提前说声谢谢。

使用数组来保存这组数字。在开始块中定义它

BEGIN {
  i=0
  for (n=1; n<=8; n++) set[i++] = n
  for (n=57; n<=64; n++) set[i++] = n
  for (n=9; n<=49; n+=8) {set[i++] = n; set[i++] = n+7}
}

我试着在这里按代码运行。但我也没有得到错误的答案。开始{i=0 for(n=1;nwell显然你不想使用$3和$6,你想使用a[1]和b[1]。不要指望我去寻找你的老问题来获得所有细节:你甚至懒得提供链接。很抱歉缺少链接。开始{i=0 for(n=1;n
($3 in set) && ($6 in set) {next}