【问题标题】:Sum all numbers that start with the same first two digits for each name将每个名称以相同前两位数字开头的所有数字相加
【发布时间】:2018-03-23 14:20:57
【问题描述】:

我正在尝试编写一个脚本来总结所有数字(第 2 列)以相同的前两位数字(第 1 列)开头,然后用相同的前两位数字然后零保存它们(即 1001 将是 1000,96542 将为 96000)。例如;

ele  table  5
        1001.03c  1
        1002.03c  2
        1003.03c  1
        2003.03c  3
        2004.03c  1
        3006.03c  0
        3007.03c  5
       44009.03c  1
ele table  22  
        1001.03c  1
        1002.03c  0
        1003.03c  0.2
        2003.03c  1
        2004.03c  2
        3006.03c  2.2
        3007.03c  3
       44009.03c  0
       55010.03c  2

因此,我们的想法是获取具有以下输出的输出文件:

    ele  table  5
        1000.03c  4
        2000.03c  4
        3000.03c  5
       44000.03c  1
ele table  22  
        1000.03c  1.2
        2000.03c  3
        3000.03c  5.2
        4000.03c  0
       55000.03c  2

该列表用于一个长文件。我将不胜感激。

【问题讨论】:

标签: bash awk sed


【解决方案1】:

Awk解决方案:

awk 'function pr(){ 
         printf "\t%d%0*d%s  %s\n", k, len-6, "", fr, sum; sum = 0;  
     }
     /^ele +table/{
         if (k) pr();
         print; next
     }
     k && substr($1, 1, 2) != k{ pr() }
     { 
         k = substr($1, 1, 2); 
         len = length($1);
         fr = substr($1, index($1, "."));
         sum += $2 
     }
     END{ pr() }' file

输出:

ele  table  5
    1000.03c  4
    2000.03c  4
    3000.03c  5
    44000.03c  1
ele table  22  
    44000.03c  0
    1000.03c  1.2
    2000.03c  3
    3000.03c  5.2
    44000.03c  0
    55000.03c  2

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多