Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何从特定列中添加行元素,并找出这两个元素的百分比值?_Linux_Shell - Fatal编程技术网

Linux 如何从特定列中添加行元素,并找出这两个元素的百分比值?

Linux 如何从特定列中添加行元素,并找出这两个元素的百分比值?,linux,shell,Linux,Shell,当我做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

当我做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
 
在这里,我取“1K块”“sda1”和“共享””的列值,然后将它们相加为47929224+168479740=216408964。此外,我还需要相应内存块的已用空间,即sda1=40768468和共享=78002196,因此40768468+78002196=118770664。我想执行(118770664*100)/216408964=54.88并将结果存储在EmmcSpace.txt文件中

但我对这个计算部分感到厌烦。出于某种原因,我不想要“使用%”列。那么,我该如何继续前进,以便在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;
    }
    
#包括
#包括
#包括
内部主(空)
{   
系统(“df | grepsda1 | awk-F'{print$2,$3}'>EmmcSpace.txt”);
系统(“df | grep Shared | awk-F'{print$2,$3}'>>EmmcSpace.txt”);
系统(“awk'{total1=total1+$1}END{print total1}'EmmcSpace.txt>>EmmcSpace.txt”);
系统(“awk'{total2=total2+$2}END{print total2}'EmmcSpace.txt>>EmmcSpace.txt”);
//系统(“awk'{printf($total2*100)/($total1))}'EmmcSpace.txt”);
//系统(“total='expr$total1\*100'{print total}'”;
//系统(“总计=`expr$total1\*100`”;
//系统(“总计=`expr$total/total2`”;
返回0;
}

在表面上,OP希望检索两个本地文件系统(sda1和shared)上的总块,并报告组合块的使用率%。“df”的大多数现代版本都有一个“--total”,它正好执行这个功能

df --total / /media/sf_Shared

那么你是在问awk脚本而不是C?如果你的C程序除了调用
system()
,什么都没有,你就不应该用C来完成任务。