[英]inline if else statement in bash
我运行以下代码
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。
听起来您正在尝试获取磁盘吞吐量利用率,或者awk
不能使用-1
。
awk
是它自己的独立脚本语言,您不能在其中使用任何bash
语法。
但是,主要问题是,在阅读完所有行之前,无法确定是否找到了电话号码。 处理完所有行后,即可确定是打印数字还是-1
。 您可以为此使用awk的特殊END
块。 此代码还使用特殊的BEGIN
块来设置默认值:
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);
}
'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.