首页 > 解决方案 > 在一行中打印两个命令的输出

问题描述

我有这个工作:

while sleep 5s
 do
  lscpu | grep 'CPU MHz:' | cut -d ':' -f 2 | awk '{$1=$1};1' && grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'
done

它给了我以下输出:

1601.058
3.4811%
1452.514
3.48059%
1993.800
3.48006%
2085.585
3.47955%
2757.776
3.47902%
1370.237
3.47851%
1497.903
3.47798%

但我真的很想把这两个值放在一行上。每次我尝试这样做时,都会遇到双引号/单引号变量问题。当然,我从网上提取了一些 awk 的东西,所以我并没有真正跟上这方面的速度。我只想打印每行、CPU 时钟并每 5 秒加载一次。

你能帮我找到更好的方法吗?

标签: bashshell

解决方案


您可以使用进程替换来运行lscpucat /proc/stat提供给单个命令。无需使用管道。

while sleep 5; do
    awk '/CPU MHz:/{printf "%s ", $NF} /cpu /{print ($2+$4)*100/($2+$4+$5)"%"}' <(lscpu) /proc/stat
 done

如果只有一个输入命令:

date| awk '{print $1}'
Wed

或者

awk '{print $NF}' <(date)
2019

如果有多个命令:例如,在同一行中获取两个日期命令的年份。(不是很有用的例子,只是为了演示)

awk '{printf "%s ", $1=NF}END{print ""}' <(date) <(date)
2019 2019

推荐阅读