두 개의 열 값을 추가하고 백분율 값을 찾는 방법은 무엇입니까?

두 개의 열 값을 추가하고 백분율 값을 찾는 방법은 무엇입니까?

이렇게 하면 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

"1k 블록" 및 "사용된" 열은 각각 및 변수에서 및 로 /dev/sda1시작하는 모든 행에 추가되고 합계 비율이 끝에 인쇄됩니다.Sharedtotalused

그러면 출력이 파일로 리디렉션됩니다 EmmcSpace.txt.

관련 정보