gpt4 book ai didi

linux - 在 bash 中内联 if else 语句

转载 作者:太空宇宙 更新时间:2023-11-04 10:26:45 25 4
gpt4 key购买 nike

我运行下面的代码

iostat -x 1 2 | sed 's/,/./g' | awk '/^avg-cpu/        {c++; a=2} 
c==2 && a && !--a {printf ("%s,%s,%s,", $1, $3, $4)}
c==2 && /^sda/ {printf ("%s,", $14)}
c==2 && /^sdb/ {printf ("%s,", $14)}
c==2 && /^nvme0n1/ {printf ("%s,",$14)}'

为了获取 cpu 和磁盘 i/o 的值。我现在要做的是检查是否有 nvm 磁盘。如果有打印它的 util,否则打印 -1.00。

我试过了

if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1.00}'

我得到了

awk: cmd. line:5:                        if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1}
awk: cmd. line:5: ^ syntax error
awk: cmd. line:5: if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1}
awk: cmd. line:5: ^ syntax error
awk: cmd. line:5: if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1}
awk: cmd. line:5: ^ syntax error

c==2 && !/^nvme0n1/ {printf ("%s,",1.00)}'

这给了我不止一个1.00,我估计每个1.00每次都找不到。

不幸的是,我没有得到 ShellCheck 的帮助 enter image description here

最佳答案

听起来您正在尝试获取磁盘吞吐量利用率,或者 -1 不适用于 awk

awk 是它自己的、独立的脚本语言,您不能在其中使用任何 bash 语法。

但主要问题是,在阅读所有行之前,无法确定您是否找到了您的号码。处理完所有行后,您可以确定是打印数字还是 -1。您可以为此使用 awk 的特殊 END block 。此代码还使用特殊的 BEGIN block 来设置默认值:

iostat -x 1 2 | sed 's/,/./g' | awk '
BEGIN {
disk = -1;
}
/^avg-cpu/ {c++; a=2}
c==2 && a && !--a {printf ("%s,%s,%s,", $1, $3, $4)}
c==2 && /^sda/ { disk=$14;}
c==2 && /^sdb/ { disk=$14; }
c==2 && /^nvme0n1/ { disk=$14; }
END {
printf("%s", disk);
}
'

关于linux - 在 bash 中内联 if else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41268620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com