使用awk更改特定步骤中特定列中每个字段的值?

Change values of each field in a specific column in specific step by using awk?

这是来自我的一个输入文件的非常小的片段(我有 100 个文件)。

900 mgdg molecules in water t= 600000.00000 step= 400000000
119898
    1MGD     C5    1   2.709  14.491   1.493
    1MGD     H5    2   2.664  14.412   1.433
    1MGD     O5    3   2.717  14.464   1.627
    1MGD     C1    4   2.599  14.430   1.687
    1MGD     H1    5   2.546  14.350   1.634
    1MGD     C2    6   2.504  14.550   1.687
    1MGD     H2    7   2.527  14.628   1.759
    1MGD     O2    8   2.370  14.507   1.721
    1MGD    HO2    9   2.338  14.563   1.791
    1MGD     C3   10   2.492  14.611   1.546
    1MGD     H3   11   2.430  14.548   1.482
    1MGD     O3   12   2.425  14.739   1.527
    1MGD    HO3   13   2.337  14.713   1.551
    1MGD     C4   14   2.622  14.618   1.470
    1MGD     H4   15   2.598  14.620   1.364
    1MGD     O4   16   2.684  14.733   1.508
   19SOL     OW16143   5.027  21.387   5.795
   19SOL    HW116144   4.959  21.399   5.861
   19SOL    HW216145   5.071  21.472   5.790
   21SOL     OW16149   0.525  22.084   5.174
   21SOL    HW116150   0.615  22.054   5.168
   21SOL    HW216151   0.520  22.125   5.260
   43SOL     OW16215   0.547  18.610   5.603
   43SOL    HW116216   0.517  18.532   5.650
   43SOL    HW216217   0.632  18.585   5.567
   6.36535  23.37625  12.09434

我想要这样的输出

900 mgdg molecules in water t= 600000.00000 step= 400000000
119898
    1MGD     C5    1   2.709  14.491   1.493
    1MGD     H5    2   2.664  14.412   1.433
    1MGD     O5    3   2.717  14.464   1.627
    1MGD     C1    4   2.599  14.430   1.687
    2MGD     H1    5   2.546  14.350   1.634
    2MGD     C2    6   2.504  14.550   1.687
    2MGD     H2    7   2.527  14.628   1.759
    2MGD     O2    8   2.370  14.507   1.721
    3MGD    HO2    9   2.338  14.563   1.791
    3MGD     C3   10   2.492  14.611   1.546
    3MGD     H3   11   2.430  14.548   1.482
    3MGD     O3   12   2.425  14.739   1.527
    4MGD    HO3   13   2.337  14.713   1.551
    4MGD     C4   14   2.622  14.618   1.470
    4MGD     H4   15   2.598  14.620   1.364
    4MGD     O4   16   2.684  14.733   1.508
   19SOL     OW16143   5.027  21.387   5.795
   19SOL    HW116144   4.959  21.399   5.861
   19SOL    HW216145   5.071  21.472   5.790
   21SOL     OW16149   0.525  22.084   5.174
   21SOL    HW116150   0.615  22.054   5.168
   21SOL    HW216151   0.520  22.125   5.260
   43SOL     OW16215   0.547  18.610   5.603
   43SOL    HW116216   0.517  18.532   5.650
   43SOL    HW216217   0.632  18.585   5.567
   6.36535  23.37625  12.09434

所以我想更改第一列的值,但只能从第 3 行更改为第 18 行。所以在每一步(例如 4)中,MGD 之前的数字都会增加。我试着写这样的脚本,但没有成功

awk '
{
    if (NR >= 3 && NR <= 18)
    {
        FNR==3
        {                  
        ++count
        value=count"MGD"
        }
        {
        =value
        }
        1
        FNR%129==0
        ++count
        value=count"MGD"
        {print [=12=]}
    }

    else
    {
    print [=12=]
    }
}
' eq4_1.gro | tee eq5_1.gro

我能够通过这个脚本得到满足您需求的东西:

BEGIN{
    stepSize = 4
}

{
    if (NR >= 3 && NR <= 18)
    {
        if ((NR - 3) % 4 == 0)
        {
            ++count
        }
        printf("%5dMGD %s %s %s %s %s\n", count, , , , , )
    }
    else
    {
        print
    }
}

gawk v5.0.0,运行 和 awk -f script.awk test.txt

输出:

900 mgdg molecules in water t= 600000.00000 step= 400000000
119898
    1MGD C5 1 2.709 14.491 1.493
    1MGD H5 2 2.664 14.412 1.433
    1MGD O5 3 2.717 14.464 1.627
    1MGD C1 4 2.599 14.430 1.687
    2MGD H1 5 2.546 14.350 1.634
    2MGD C2 6 2.504 14.550 1.687
    2MGD H2 7 2.527 14.628 1.759
    2MGD O2 8 2.370 14.507 1.721
    3MGD HO2 9 2.338 14.563 1.791
    3MGD C3 10 2.492 14.611 1.546
    3MGD H3 11 2.430 14.548 1.482
    3MGD O3 12 2.425 14.739 1.527
    4MGD HO3 13 2.337 14.713 1.551
    4MGD C4 14 2.622 14.618 1.470
    4MGD H4 15 2.598 14.620 1.364
    4MGD O4 16 2.684 14.733 1.508
   19SOL     OW16143   5.027  21.387   5.795
   19SOL    HW116144   4.959  21.399   5.861
   19SOL    HW216145   5.071  21.472   5.790
   21SOL     OW16149   0.525  22.084   5.174
   21SOL    HW116150   0.615  22.054   5.168
   21SOL    HW216151   0.520  22.125   5.260
   43SOL     OW16215   0.547  18.610   5.603
   43SOL    HW116216   0.517  18.532   5.650
   43SOL    HW216217   0.632  18.585   5.567
   6.36535  23.37625  12.09434