使用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%。我更新了求和值。为什么要这样做?倒数第二行的输入带来了很多负面影响。。。