如何将两列值相加并找出百分比值?

如何将两列值相加并找出百分比值?

当我这样做时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 块”和“已使用”列,并在末尾打印总和的比率。Sharedtotalused

然后输出被重定向到文件中EmmcSpace.txt

相关内容