сумма столбцов в определенном блоке в файле: может ли awk сделать это? - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу обработать определенный блок в файле.И работа, которую я хочу, это суммировать столбец в блоке.Возможно ли использовать awk?Или другой командир лучше?

  1. найдите str1 ("атомы" в образце)
  2. , затем начните суммировать восьмой столбец $ 7
  3. и остановитесь, если найдетеstr2 («облигации» в образце)

В настоящий момент я могу сделать следующее:

awk 'BEGIN { i=0; sum=0.0;} { if ($9) { print $7; sum+=$7;}} END {printf "total charge is %10.6f", sum}'

В этом случае, если где-то в 9-м столбце есть другие значения,это будет ошибка.

[пример файла w.1500 строка]

.... many lines
[ atoms ]
;   nr  type  resi  res  atom  cgnr     charge      mass       ; qtot   
 1   c3     1     2     C    1     0.138400     12.01000 ; qtot 0.138
 2   os     1     2     O    2    -0.436600     16.00000 ; qtot -0.298
 3   c3     1     2    C1    3    -0.093400     12.01000 ; qtot -0.392
 4   c3     1     2    C2    4    -0.076400     12.01000 ; qtot -0.468

[ bonds ]
;   ai     aj funct   r             k
     1      2   1    1.4316e-01    2.5824e+05 ;      C - O
.... many lines are followed

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете попробовать этот скрипт на awk:

awk '$0=="[ atoms ]"{go=1}                         # Set flag to start the sum
     go{sum+=$7}                                   # If flag set sum the 8th column
     $0=="[ bonds ]"{go=0}                         # End the sum
     END{printf "total charge is %10.6f\n",sum}    # Print result
' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...