![如何将两列值相加并找出百分比值?](https://linux22.com/image/177270/%E5%A6%82%E4%BD%95%E5%B0%86%E4%B8%A4%E5%88%97%E5%80%BC%E7%9B%B8%E5%8A%A0%E5%B9%B6%E6%89%BE%E5%87%BA%E7%99%BE%E5%88%86%E6%AF%94%E5%80%BC%EF%BC%9F.png)
当我这样做时df
,我得到以下结果:
Filesystem 1K-blocks Used Available Use% Mounted on
udev 1529860 4 1529856 1% /dev
tmpfs 308116 960 307156 1% /run
/dev/sda1 47929224 40768468 4703004 90% /
none 4 0 4 0% /sys/fs/cgroup
none 5120 0 5120 0% /run/lock
none 1540572 76 1540496 1% /run/shm
none 102400 44 102356 1% /run/user
Shared 168479740 78002196 90477544 47% /media/sf_Shared
/dev/sr0 83904 83904 0 100% /media/amitk/VBox_GAs_6.0.41
sda1
现在,我想将和的“1K-blocks”和“Used”的值相加Shared
,以计算总和的比率,并将它们存储在文件中EmmcSpace.txt
。
在上面的示例中,“1K 块”的总和将为 47929224 + 168479740 =216408964,“已使用”的总和为 40768468 + 78002196 = 118770664。
然后我想做 (118770664 *100)/ 216408964=54.88 并将结果存储在文件中。
但我被这个计算部分困住了。出于某种原因,我不想要“use%”列。那么我该如何继续,以便最终在 EmmcSpace.txt 文件中应该只有百分比值,即 54.88 或 54 而没有其他值
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main(void)
{
system("df |grep sda1 |awk -F ' ' '{print $2, $3}' >EmmcSpace.txt");
system("df |grep Shared |awk -F ' ' '{print $2, $3}' >>EmmcSpace.txt");
system("awk '{total1 = total1 + $1}END{print total1}' EmmcSpace.txt >>EmmcSpace.txt");
system("awk '{total2 = total2 + $2}END{print total2}' EmmcSpace.txt >>EmmcSpace.txt");
//system("awk '{printf (($total2 *100) / ($total1))}' EmmcSpace.txt");
//system("total='expr $total1 \* 100' '{print total}'");
//system("total=`expr $total1 \* 100` ");
//system("total=`expr $total / total2`");
return 0;
}
答案1
您实际上可以用于awk
整个任务:
df | awk '$1~/^Shared/ || $1~/^\/dev\/sda1/ {total+=$2;used+=$3} END{printf("%.2f\n",100*used/total)}' > EmmcSpace.txt
将为变量 和 中分别以/dev/sda1
和开头的所有行添加“1k 块”和“已使用”列,并在末尾打印总和的比率。Shared
total
used
然后输出被重定向到文件中EmmcSpace.txt
。