awk复杂用法多模式和多动作块

简介: awk复杂用法多模式和多动作块

在AWK中,可以定义多个模式和对应的动作块来进行复杂的文本处理。一个基本的AWK脚本结构如下:

pattern1 { action1 }
pattern2 { action2 }
...

这里,每个pattern是一个条件表达式,当当前行满足该条件时,相应的action块中的命令就会被执行。如果省略了模式部分,那么动作块将对每一行生效。

例如:

/regex_pattern1/ { print "匹配 pattern1: ", $0 }
/regex_pattern2/ { action2; next }   # 如果匹配 pattern2,则执行 action2,并跳过后续动作
!/regex_pattern3/ { action3 }        # 如果不匹配 pattern3,则执行 action3

# BEGIN 和 END 块也是特殊的模式:
BEGIN { FS=":" }                   # 在处理任何输入之前设置分隔符为冒号
END { print "总计行数:", NR }       # 在所有输入行处理完毕后打印总行数

# 或者针对不同列值进行操作
$3 > 50 { print "第3列大于50: ", $0 }

# 多个动作也可以放在同一个模式下用分号隔开
/pattern4/ {
    action4;
    action5;
}

更复杂的用法可能还包括变量赋值、数组操作、函数调用等。以下是一个包含多个模式和动作块的例子:

NR == 1 { header = $0; next }      # 第一行是表头,存储并跳过
$3 >= 10 && $3 <= 20 { sum += $2 }  # 第三列在10到20之间的行,累加第二列数值
/.*/ { print }                     # 打印所有行(默认动作)
END { print "统计范围内的总和:", sum }  # 在处理完所有行后输出累加的结果

在这个例子中,我们首先处理文件的第一行作为表头并保存它,然后计算第三列值在特定范围内时对应的第二列数值之和,最后在处理结束时输出这个总和。同时,所有行都会被打印出来。

目录
相关文章
|
6月前
|
程序员
第四十二章 使用^%SYS.MONLBL检查例程性能 - 逐行分隔输出报告
第四十二章 使用^%SYS.MONLBL检查例程性能 - 逐行分隔输出报告
36 0
|
6月前
|
存储 Perl
awk多模式、多动作
awk多模式、多动作
51 6
|
6月前
|
存储 Shell 数据处理
在 `awk` 中,读取外部数据或配置
在 `awk` 中,读取外部数据或配置
81 4
|
6月前
|
Perl
awk的多条件模式(逻辑AND)
awk的多条件模式(逻辑AND)
462 2
|
6月前
|
Perl
awk复杂用法模式匹配与动作
awk复杂用法模式匹配与动作
91 2
|
Linux BI Perl
awk指令用法详解
awk指令用法详解
167 0
|
Web App开发 网络协议 Unix
Linux-文本处理三剑客awk详解+企业真实案例(变量、正则、条件判断、循环、数组、分析日志)
文本处理 awk 1.awk简介 awk是一种编程语言,用于在Linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其他命令的输出,它支持用户自定义函数和动态正则正则表达式等先进功能,是Linux/unix下的一个强大的编程工具。它在命令行中使用,但更多是作为脚本来使用。
514 0
Linux-文本处理三剑客awk详解+企业真实案例(变量、正则、条件判断、循环、数组、分析日志)