awk命令我不明白

时间:2017-09-15 13:44:55

标签: bash awk

我有一个由别人写的剧本,其中有一些我不理解的内容 我在这个脚本中有一个函数:

_service_description_prefix(){
    echo "select xxxxxxxxx" | _mysql_execute | awk -F";" '
    function _print(AAAA, BBBB){
        if ( AAAA == "" ) { next };
        DESCR=AAAA";"ALERT ;
        exit
    }
    /.*/ { DESCR="" ; AAAA="" ;
        if ( $2 ~ "^L24/7" ) { ALERT="yes" } else { ALERT="no" };
         }
    ( $3 == "ZZ" ){
        xxxxxx
    }
    ----- There are a lot more here -----
    ( $3 == "YY" ){
        xxxxxx
    }
    /.*/ { AAAA="ee" ; ALERT="no" ;
    }
    '
}

我不明白的是/.*/
的意思 所有($ 3 == xx)似乎表现得像if条件,但我没有“if”! 这是一些我不知道的语法吗?

谢谢你的帮助!
阿芒

1 个答案:

答案 0 :(得分:2)

/.*/$3 == "YY"都是基本的awk语法。您可以在awk man page中找到详细说明,但这里有一个快速摘要。

awk程序由一般形式的多个语句组成:

pattern { action }

模式几乎可以是任何表达;如果评估为true,则awk将执行操作。模式/.*/regular expression,匹配"任何字符,任意次数"。所以:

/.*/ { action }

将匹配包含零个或多个字符的任何行。换句话说,它将始终执行 action 。实际上,它相当于:

{action}

表达式$3 == "YY"是一个简单的布尔表达式,用于检查字段编号3是否等于" YY"。默认情况下,awk在空格上拆分输入,因此给出以下输入:

AA MM YY ZZ
AA MM XX ZZ

第一行匹配$3 == "YY",第二行不匹配。