【问题标题】:Change values of each field in a specific column in specific step by using awk?使用awk在特定步骤中更改特定列中每个字段的值?
【发布时间】:2020-06-29 15:03:13
【问题描述】:

这是来自我的一个输入文件的非常小的片段(我有 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"
        }
        {
        $1=value
        }
        1
        FNR%129==0
        ++count
        value=count"MGD"
        {print $0}
    }

    else
    {
    print $0
    }
}
' eq4_1.gro | tee eq5_1.gro

【问题讨论】:

    标签: awk text-processing


    【解决方案1】:

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

    BEGIN{
        stepSize = 4
    }
    
    {
        if (NR >= 3 && NR <= 18)
        {
            if ((NR - 3) % 4 == 0)
            {
                ++count
            }
            printf("%5dMGD %s %s %s %s %s\n", count, $2, $3, $4, $5, $6)
        }
        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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多