我正在尝试将 CPU 频率的简化输出设置为 3 位数字,这样如果频率小于 1000,它将输出xxx Mhz
,如果频率高于 1000,它将输出x.xx Ghz
。我只能用 获得频率lscpu | sed -n 's/CPU MHz:[ \t]*//p'
,用 获得前 4 位数字lscpu | sed -n 's/CPU MHz:[ \t]*//p' | cut -c1-4
,但我不确定如何解析它以实现所需的结果。
答案1
尝试:
lscpu | awk '/CPU MHz/{if($NF+0>1000)printf "%.3f GHz\n",$NF/1000; else printf "%.3f MHz\n",$NF}'
怎么运行的
/CPU MHz/{...}
这将选择我们想要的行并仅对该行执行花括号中的命令。
if($NF+0>1000)printf "%.3f GHz\n",$NF/1000; else printf "%.3f MHz\n",$NF
如果最后一个字段
$NF
大于 1000,则将其除以 1000,并将其打印为 GHz。否则,我们将其打印为 MHz。格式%.3f
决定打印多少位有效数字。请根据您的喜好进行调整。
多行版本
对于那些喜欢将命令分布在多行上的人来说:
lscpu | awk '
/CPU MHz/{
if($NF+0>1000)
printf "%.3f GHz\n",$NF/1000
else
printf "%.3f MHz\n",$NF
}'