这是脚本:
TYPE="${BLOCK_INSTANCE:-mem}"
awk -v type=$TYPE '
/^MemTotal:/ {
mem_total=$2
}
/^MemFree:/ {
mem_free=$2
}
/^Buffers:/ {
mem_free+=$2
}
/^Cached:/ {
mem_free+=$2
}
/^SwapTotal:/ {
swap_total=$2
}
/^SwapFree:/ {
swap_free=$2
}
END {
if (type == "swap") {
free=swap_free/1024/1024
used=(swap_total-swap_free)/1024/1024
total=swap_total/1024/1024
} else {
free=mem_free/1024/1024
used=(mem_total-mem_free)/1024/1024
total=mem_total/1024/1024
}
pct=used/total*100
# full text
printf("%.1fG/%.1fG (%.f%)\n", used, total, pct)
# short text
printf("%.f%\n", pct)
# color
if (pct > 90) {
print("#FF0000\n")
} else if (pct > 80) {
print("#FFAE00\n")
} else if (pct > 70) {
print("#FFF600\n")
}
}
' /proc/meminfo
这是我尝试运行它时出现的错误:
$ ./memory
awk: run time error: not enough arguments passed to printf("%.1fG/%.1fG (%.f%)
")
FILENAME="/proc/meminfo" FNR=46 NR=46
1.1G/15.3G (7
它打印了我想要的内容(内存使用情况),但也有错误。
有人可以帮忙吗?
答案1
Awkprintf
将您的尾随%
视为第四个格式说明符的开头。%%
例如,如果您想打印您需要的文字%符号
$ awk 'BEGIN{printf("%.1fG/%.1fG (%.f%%)\n", 1.2, 3.4, 5.6)}'
1.2G/3.4G (6%)
答案2
看来您使用了,当它没有有效的格式时,mawk
它不支持字面打印。%
将尾随的行更改%
为:
# full text
printf("%.1fG/%.1fG (%.f%%)\n", used, total, pct)
# short text
printf("%.f%%\n", pct)
或 切换到gawk
或nawk
,如果没有进行有效的格式转换,它将%
按原样输出。