The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"помощь с awk скриптом"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Разное)
Изначальное сообщение [ Отслеживать ]

"помощь с awk скриптом"  +/
Сообщение от KYTX (ok) on 17-Апр-13, 10:00 
Доброе утро, уважаемые. Прошу вашей помощи в редактировании awk скрипта.

Вот сам скрипт

BEGIN { printf ("CRYST1   200.000   200.000   200.000  90.00  90.00  90.00 P 1           1\n")
      maxatoms=1000
      natom=0
      found_struct = 0
      found_bond   = 0
      }
{
   if( NF == 5 )
   {
              foundff=0
              natom++
              fftype[natom]="UNKNOWN"
              if ($1 ~ /CT/)
                {
                   fftype[natom] = "C"
                   foundff=1
                }
              else if ($1 ~ /OH/)
                {
                   fftype[natom] = "O"
                   foundff=1
                }
              else if ($1 ~ /HC/)
                {
                   fftype[natom] = "H"
                   foundff=1
                }
                else if ($1 ~ /N/)
                {
                   fftype[natom] = "N"
                   foundff=1
                }

              else if ($1 ~ /H1/)
                {
                   fftype[natom] = "H"
                   foundff=1
                }
              else if ($1 ~ /HO/)
                {
                   fftype[natom] = "H"
                   foundff=1
                }
              else if ($1 = "C")
                {
                   fftype[natom] = "C"
                   foundff=1
                }
              else if ($1 = "O")
                {
                   fftype[natom] = "O"
                   foundff=1
                }

              next

              x[natom] = $1
              y[natom] = $2
              z[natom] = $3


              if  (foundff == 0)
                printf("PROBLEM : Atom ff type %s not known\n", $6)
  }

}

END {
         for (iatom=1; iatom <= natom; iatom++)
          {
            printf("HETATM %d %2s %d %14.9f %14.9f %14.9f\n" ,
                  iatom, fftype[iatom], iatom,  x[iatom], y[iatom], z[iatom])
          }
         printf ("END\n")
    }

Вот файл формат которого я хочу изменить.

         0         3       186                  200                75202
timestep       500       186         0         3    0.002000    1.000000
       40.0000000000        0.0000000000        0.0000000000
       -0.0000000034       40.0000000000        0.0000000000
       -0.0000000034       -0.0000000034       40.0000000000
CT_1             1   12.011000    0.061000    1.087513
    -1.961325738         1.828501682        -8.933652557
CT_1             2   12.011000    0.061000    0.789711
    -3.851025437         3.495427316        -10.05849230
CT_1             3   12.011000    0.061000    0.581330
    -5.804493575         4.589489777        -8.369482861
CT_1             4   12.011000    0.061000    0.587494
    -7.762880081         2.911439463        -7.080665587
CT_1             5   12.011000    0.061000    0.921486
    -9.153941740         4.957761011        -5.673450453
CT_1             6   12.011000    0.061000    1.466178
    -11.21951030         3.799887793        -3.893597764
CT_1             7   12.011000    0.061000    1.062685
    -13.41586695         5.618523114        -4.191760148
CT_2             8   12.011000   -0.240000    5.121940
    -3.117992327        -3.327499197        -8.354430641
CT_2             9   12.011000   -0.240000    2.437730
   -0.9758711488         1.974964679        -10.16233562
CT_2            10   12.011000   -0.240000    1.135955
    -2.852418267         4.675569470        -9.920301105
CT_2            11   12.011000   -0.240000    1.900220
    -5.704642269         3.360686205        -14.45101155
CT_2            12   12.011000   -0.240000    0.911877
    -4.703447895         5.335417134        -7.625501542
CT_2            13   12.011000   -0.240000    1.656308
    -5.909815044         9.672510884        -7.342262570
CT_2            14   12.011000   -0.240000    0.834395
    -7.655049494         1.848229991        -5.967773809
CT_2            15   12.011000   -0.240000    1.101301
    -7.027111753        -2.217916095        -8.514030555
CT_2            16   12.011000   -0.240000    0.853168
    -7.793699990         5.607703376        -5.277482258
CT_2            17   12.011000   -0.240000    1.052948
    -12.05427600         7.338218900        -10.66580110
CT_2            18   12.011000   -0.240000    0.979198
    -1.232634370         2.590557276        -7.750497413
CT_2            19   12.011000   -0.240000    1.516629
    -11.24302244         4.059534202        -2.362761919
CT_2            20   12.011000   -0.240000    4.850921
    -11.52286139        -2.229203800        -2.608836869
CT_2            21   12.011000   -0.240000    1.276129
    -12.53234928         6.810640530        -4.521367552
CT_2            22   12.011000   -0.240000    5.033765
    -13.29272803         9.456081404        -1.309982948
CT_2            23   12.011000   -0.240000    3.497367
    -16.13360630         6.840476499        -6.903171776
CT_2            24   12.011000   -0.240000    3.204971
     19.28112844         7.253992713        -2.867325927
HC              25    1.008000    0.080000    0.975259
    -1.782251143         2.584467300        -6.792666892

В результате работы скрипта я хочу получить

CRYST1   200.000   200.000   200.000  90.00  90.00  90.00 P 1           1
HETATM 1  C 1     -1.961325738         1.828501682        -8.933652557
HETATM 2  C 2     -3.851025437         3.495427316        -10.05849230
HETATM 3  C 3     -5.804493575         4.589489777        -8.369482861

и т.д.

Однако координаты файла(следующая строчка после CT_1             1   12.011000    0.061000    1.087513) скрипт не подхватывает. Не могли бы вы взглянуть и подсказать как мне решить эту проблему. Заранее благодарен.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "помощь с awk скриптом"  +/
Сообщение от Andrey Mitrofanov on 17-Апр-13, 11:57 
>[оверквотинг удален]
> {
>    if( NF == 5 )
>    {
>   fftype[natom]="UNKNOWN"
>   if ($1 ~ /CT/)
>     {
>        fftype[natom] = "C"
>        foundff=1
>     }
>   else if ($1 ~ /OH/)

На, возьми замену твоему монстр уозному if-else и больше никогда так не! (код не проверял)

if(foundff=(match($1,"^O$|^C$|CT|OH|HC|N|H1|HO",aa)>0))fftype[natom]=substr(aa[0],1,1)

>   next

Это тут зачем? если ты думаешь, что _это_ прочтёт в $0 следующую строку, то ты "немного" ошибаешься.

>   x[natom] = $1
>   y[natom] = $2
>   z[natom] = $3
> END {
>          for (iatom=1; iatom<= natom; iatom++)
> printf("HETATM %d %2s %d %14.9f %14.9f %14.9f\n" ,

Кстати, скрытого смысла класть данные в массив, а потом в конце их же выводить _в _том _же порядке я не вижу. Подозреваю, его там нет. ==Делай принт прямо после чтения, скри^Wмассив не нyжеH.

>          printf ("END\n")

Ну, вот это на месте.

>     }
> Однако координаты файла(следующая строчка после CT_1      
> могли бы вы взглянуть и подсказать как мне решить эту проблему.

Эта конкретная проблема решается заменой твоего next на getline.

> Заранее благодарен.

Не за что, глаза ж болят от вида такого.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "помощь с awk скриптом"  +/
Сообщение от KYTX (ok) on 17-Апр-13, 12:22 
Спасибо за комментарии. Если честно, я не очень хорошо в ладах с программированием так что могу делать все топорно и задавать кучу вопросов. Один из них - как именно заменить next на getline - я прочитал мануал по последней и не очень разобрался.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "помощь с awk скриптом"  +/
Сообщение от KYTX (ok) on 17-Апр-13, 12:38 
О, все заработало. Спасибо еще раз.
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "помощь с awk скриптом"  +/
Сообщение от KYTX (ok) on 17-Апр-13, 12:51 
Еще один вопрос - я работаю с файлом, у которого есть несколько массивов данных(начинающихся с timestep)
timestep       500        25         0         3    0.001000    0.500000
       20.0000000000        0.0000000000        0.0000000000
       -0.0000000017       20.0000000000        0.0000000000
       -0.0000000017       -0.0000000017       20.0000000000
CT_1             1   12.011000   -0.019000    0.640298
    0.9849963161E-01    -3.415112416         1.363374178
HC               2    1.008000    0.080000    1.479956
   -0.2121662555        -3.863455405        0.3080721923
HC               3    1.008000    0.080000    1.523069
    -1.497545961        -4.274924074         2.443930026
HC               4    1.008000    0.080000    1.333436
   -0.2046782675E-01    -3.884045345         3.393900210
HC               5    1.008000    0.080000    0.475593
    0.6645083761E-01    -5.274859543         2.207872210
HC               6    1.008000    0.080000    2.148578
     2.012043588        -4.255526008         1.282247861
HC               7    1.008000    0.080000    2.318435
     2.030435317        -2.972730305         2.435165857
HC               8    1.008000    0.080000    2.579209
     1.986543784        -2.614081904        0.6651575328
HC               9    1.008000    0.080000    2.835455
    -4.516000060       -0.6390584439        0.1821449846
HC              10    1.008000    0.080000    2.900618
    -3.847187217        -2.017469231       -0.6873319288
HC              11    1.008000    0.080000    3.014232
    -4.558244417       -0.6516313832        -1.645346738
CT_2            12   12.011000   -0.240000    2.414372
    -4.027556611       -0.9305956823       -0.7567879539
CT_2            13   12.011000   -0.240000    1.889602
     1.660000184        -3.278731061         1.464017002
CT_2            14   12.011000   -0.240000    0.463260
   -0.3736403707        -4.330624723         2.450383850
C               15   12.011000    0.569000    0.560350
   -0.5366914029        -1.980928569         1.574219882
O               16   15.999000   -0.570000    1.607385
   -0.4278922248        -1.357753029         2.570890083
N               17   14.007000   -0.730000    0.140561
    -1.208805366        -1.532235679        0.5673463632
H               18    1.008000    0.370000    0.907631
    -1.136311398        -2.139234863       -0.2786154629
CT_3            19   12.011000    0.140000    0.388223
    -1.903616044       -0.2739084042        0.4907961156
CT_4            20   12.011000    0.200000    0.889058
    -2.713660887       -0.1945789844       -0.8233791846
H1              21    1.008000    0.080000    1.790695
    -2.144431000       -0.6193961442        -1.696199396
H1              22    1.008000    0.080000    1.251414
    -1.113333313        0.4597479795        0.4873591014
H1              23    1.008000    0.080000    1.401424
    -2.605232776       -0.2539148024         1.355851660
OH              24   15.999000   -0.680000    0.170902
    -2.883721417         1.170430901        -1.063007617
HO              25    1.008000    0.400000    0.802468
    -3.755698183         1.390412071       -0.7269985042
timestep      1500        25         0         3    0.001000    1.500000
       20.0000000000        0.0000000000        0.0000000000
       -0.0000000017       20.0000000000        0.0000000000
       -0.0000000017       -0.0000000017       20.0000000000
CT_1             1   12.011000   -0.019000    1.108827
    0.5930813433        -3.059647383        0.9093170534
HC               2    1.008000    0.080000    1.035396
    0.4325261101        -2.863254539         1.968758844
HC               3    1.008000    0.080000    4.510480
     1.943889135        -1.400824972        0.4446815567
HC               4    1.008000    0.080000    5.038050
     1.997587984        -2.723903724       -0.6330481166
HC               5    1.008000    0.080000    3.495500
     2.776704671        -2.790314949        0.9971734449
HC               6    1.008000    0.080000    2.646696
     1.303777680        -5.015186286         1.216356852
HC               7    1.008000    0.080000    4.899226
    0.5444482658        -4.839385307       -0.3926739911
HC               8    1.008000    0.080000    4.126721
   -0.3351590642        -4.945216690         1.087335425
HC               9    1.008000    0.080000    5.025144
    -2.335162001         1.703747125         1.766118970
HC              10    1.008000    0.080000    5.259478
    -1.485614704        0.5232332483         2.667235397
HC              11    1.008000    0.080000    6.747800
    -3.119713679         1.071097349         3.299766915
CT_2            12   12.011000   -0.240000    4.989691
    -2.493930014        0.8599303479         2.445446594
CT_2            13   12.011000   -0.240000    3.045725
    0.5382711509        -4.518100324        0.7268131019
CT_2            14   12.011000   -0.240000    3.428692
     1.873711712        -2.498659898        0.4361924427
C               15   12.011000    0.569000    1.644059
   -0.6081926085        -2.279925921        0.1863969525
O               16   15.999000   -0.570000    3.887154
   -0.7777844810        -2.458871627        -1.043373240
N               17   14.007000   -0.730000    0.487297
    -1.381080530        -1.599443295        0.9939790523
H               18    1.008000    0.370000    2.277922
    -1.248085227        -1.605021545         2.010060279
CT_3            19   12.011000    0.140000    0.355424
    -2.357481513       -0.7177380924        0.4916404910
CT_4            20   12.011000    0.200000    2.979709
    -3.243082218       -0.1626320330         1.574424959
H1              21    1.008000    0.080000    4.505487
    -3.471572515       -0.9883864713         2.248890966

Сейчас все складируется в один файл, а мне необходимо разделить его так же, как и в исходном. Как бы это сделать без нагромаждения кода(вы могли заметить, что у меня пока только так получается). Спасибо.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру