いくつかの数を丸める方法を見つけようとしています。
私が見つけたトピック:https://stackoverflow.com/questions/2395284/round-a-divided-number-in-bash
Bashスクリプトで次のコマンドを使用しています。
free -h | gawk '/Mem:/{print $2}' | awk 'FNR == 1 {print $1 "B"}')
次のコードは、私がインストールしたメモリの合計量を示しています。現在3.7GBを使用しています。問題は、4GBに丸める必要があるということです。
私のコンピュータに多くの情報を要求し、その情報をすべて再表示するスクリプトがあります。 (Prollyは他のものを使用する必要がありますが、これが私が作業しているプロジェクトの1つであるため、まだ他のことを試していません。
メモリ=$(free -h | gawk '/Mem:/{print $2}' | awk 'FNR == 1 {print $1 "B"}')
$memory エコ
ここで、以下に説明するように3.7GBをエコーします。さまざまな方法を試しましたが、4GBには達できないようです。
答え1
次のことができます。
memory=$(
LC_ALL=C free -h | awk '
/^Mem/ {
suffix = $2
sub(/[0-9.]*/, "", suffix)
printf "%.0f%sB\n", $2, suffix
}'
)
(小数点以下をLC_ALL=C
使用して数字を印刷する必要があります.
(カンマを小数点として使用するロケールでは、3.7Gが3,7Gとして出力されます))。
GNU/Linux システムでは、次のこともできます。
memory=$(
awk '/^MemTotal/{print $2*1024}' < /proc/meminfo |
numfmt --to=iec --format=%0f --suffix=B
)
または:
memory=$(
free -h | awk '/^Mem/{print $2}' |
numfmt --from=iec --to=iec --format=%0f --suffix=B
)
(小数点の下ではなくロケールを処理する方法.
)
/ proc / meminfoのこのフィールドはfree
Linuxで報告されます。MemTotal
proc(5) によると、これは次のようになります。 使用可能な合計RAMの量。 @StephenKitが指摘したように、物理RAMとPCの場合はdmidecode
スーパーユーザー権限が必要ですが、BIOSから情報を取得する方が良いでしょう。
physical_memory=$(
sudo dmidecode -t memory |
awk '$1 == "Size:" && $2 ~ /^[0-9]+$/ {print $2$3}' |
numfmt --from=iec --suffix=B |
awk '{total += $1}; END {print total}' |
numfmt --to=iec --suffix=B --format=%0f
)
答え2
$ echo "3.7" | awk '{printf("%d\n",$1 + 0.5)}'
4
答え3
小数点以下の2桁に丸めたい場合は、次のような簡単な例があります。
echo "12345.12345" | nawk '{printf ("%.2f\n", $1+0.005)}'
echo "12345.345" | nawk '{printf ("%.2f\n", $1+0.005)}'