これにより、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
比率が最後に印刷されます。Shared
total
used
これにより、出力がファイルにリダイレクトされますEmmcSpace.txt
。