awk基础知识小结第1/2页

2019-09-23 09:48:20王振洲

$5 ~ /root/ { print $3 }

6、条件语句
awk 还提供了非常好的类似于 C 语言的 if 语句。if 语句示例:
{
    if ( $5 ~ /root/ ) {
       print $3
    }
}
对每一个输入行执行代码块,使用 if 语句来选择执行 print 命令。
更复杂的 awk if 语句示例。
{
    if ( $1 == "foo" ) {
       if ( $2 == "foo" ) {
            print "uno"
        } else {
          print "one"
        }
          } else if ($1 == "bar" ) {
                    print "two"
                 } else {
                    print "three"
                 }
}

使用 if 语句还可以将代码:
! /matchme/ { print $1 $3 $4 }
转换成:
{
     if ( $0 !~ /matchme/ ) {
         print $1 $3 $4
     }
}
这两个脚本都只输出不包含 matchme 字符序列的那些行。

awk 还允许使用布尔运算符 "||"(逻辑与)和 "&&"(逻辑或),以便创建更复杂的布尔表达式:
( $1 == "foo" ) && ( $2 == "bar" ) { print }
这个示例只打印第一个字段等于 foo 且第二个字段等于 bar 的行。

7、变量
awk的变量,数值变量与字符串变量。

数值变量
至今,我们不是打印字符串、整行就是特定字段。然而,awk还可以执行整数和浮点运算。使用数学表达式,可以很方便地编写计算文件中空白行数量的脚本。
BEGIN   { x=0 }
/^$/    { x=x+1 }
END     { print "I found " x " blank lines. :}" }
在 BEGIN 块中,将整数变量 x 初始化成零。然后,awk 每次遇到空白行时,awk 将执行 x=x+1 语句,递增 x。
处理完所有行之后,执行 END 块,awk 将打印出最终摘要,指出它找到的空白行数量。

字符串化变量
awk 的优点之一就是“简单和字符串化”。我认为 awk 变量“字符串化”是因为所有 awk 变量在内部都是按字符串形式存储的。同时,awk 变量是“简单的”,因为可以对它执行数学操作,且只要变量包含有效数字字符串,awk 会自动处理字符串到数字的转换步骤。要理解我的观点,请研究以下示例:
x="1.01"
# We just set x to contain the *string* "1.01"