bash - 在一行中打印两个命令的输出
问题描述
我有这个工作:
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 秒加载一次。
你能帮我找到更好的方法吗?
解决方案
您可以使用进程替换来运行lscpu
并cat /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
推荐阅读
- vba - 查找和替换文本并变成超链接
- c - 为什么这个结构赋值在 C 中不起作用?
- solidity - 我如何在不支付 gas 费用的情况下计算solidity 合约的结果?
- javascript - 如何处理未捕获的错误:[nuxt] store/index.js 应该导出一个返回 Vuex 实例的方法
- javascript - 通过 API 删除 DocuSign 中的文档选项卡
- python - 将 DataFrame json 列中的值移动到 DataFrame 行中
- c - C 中结构、位域的 Scanf 输入
- python - 如何从 Dataframe 图中切换线的可见性?
- sql - 查询以选择每小时最新的员工条目
- react-native - 如何更改平面列表末尾的按钮