繁体   English   中英

在bash中内联if else语句

[英]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。

不幸的是,我没有得到ShellCheck的帮助 在此处输入图片说明

听起来您正在尝试获取磁盘吞吐量利用率,或者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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM