удаление выбранных строк из файла данных - PullRequest
0 голосов
/ 08 сентября 2011

Этот вопрос является продолжением моего предыдущего поста под названием «Выбор цифр из регулярного выражения».

Ниже приведены примеры данных, опубликованные в предыдущем сообщении.

          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.

Я устал от кода Фредирка, и он отлично работает для выбора строк. Что ж, теперь я хотел бы распространить эту идею на мою реальную проблему.

$ 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, чтобы выбрать эти пары и сразу удалить строки.

Я хочу сказать большое спасибо заранее.

1 Ответ

1 голос
/ 08 сентября 2011

Используйте массив для хранения набора чисел. Определите его в блоке BEGIN

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}
}

Затем убедитесь, что $ 3 и $ 6 входят (или не входят) в набор:

($3 in set) && ($6 in set) {next}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...