使用bash和AWK条件求和减号

使用bash和AWK条件求和减号,bash,awk,Bash,Awk,我有一个如下格式的文本文件: crelimit:300000,sos:300000 crelimit:300000,sos:120000 crelimit:300000,sos:10000 crelimit:300000,sos:400000 crelimit:300000,sos:600000 crelimit:300000,sos:700000 crelimit:100000,sos:800000 crelimit:200000,sos:800000 crelimit:300000,sos:

我有一个如下格式的文本文件:

crelimit:300000,sos:300000
crelimit:300000,sos:120000
crelimit:300000,sos:10000
crelimit:300000,sos:400000
crelimit:300000,sos:600000
crelimit:300000,sos:700000
crelimit:100000,sos:800000
crelimit:200000,sos:800000
crelimit:300000,sos:1100000
crelimit:120000,sos:120000
我正在编写一个脚本来计算列2和列4的和减去值,条件如下:

 cat ir7_temp.txt|sed 's/:/,/g'|cut -d"," -f2,4|awk 'BEGIN {
     FS=",";
     OFS=",";
   }
    (NR > 0){
     percent = 100 * $2 / $1;
     if (percent <= 20) {
         a["0-20%"] += ($1-$2);
     } else if (percent <= 30) {

         a["21-30%"] += ($1-$2);
     } else if (percent <= 50) {

         a["31-50%"] += ($1-$2);
     } else if (percent <= 60) {

         a["51-60%"] += ($1-$2);
     } else if (percent <= 70) {

         a["61-70%"] += ($1-$2);
     } else if (percent <= 80) {

         a["71-80%"] += ($1-$2);
     } else if (percent <= 90) {

         a["81-90%"] += ($1-$2);
     } else {
         a["91-100%"] += ($1-$2);
     }
 }
 END {
     for (i in a) {
         print i, a[i];
     }
 }'|sort > ir7_temp_resul1.txt

您可以稍微简化代码

$ awk -F[,:] -v OFS=, '{a[int($4/$2)]+=($2-$4)} 
                   END {for(k in a) print k*10"-"(k+1)*10-1"%",a[k]}' file

并且可能在后处理中结合前两个bucket。

您可以稍微简化代码

$ awk -F[,:] -v OFS=, '{a[int($4/$2)]+=($2-$4)} 
                   END {for(k in a) print k*10"-"(k+1)*10-1"%",a[k]}' file

也许在后期处理中结合前两个存储桶。

你能发布所需的输出吗?我很确定第三个数据行超过100%。我更新了总和值。你为什么要这么做?倒数第二个输入行带来了很多负面影响…你能发布所需的输出吗?我很确定第三个数据行超过100%。我更新了求和值。为什么要这样做?倒数第二行的输入带来了很多负面影响。。。