awk命令行结构和语法结构

2024-12-31 17:09:59 182

awk命令行结构和语法结构

awk命令行结构

awk [ -- ] program-text file ...
# program-text即awk命令行中的awk代码部分,一般使用单引号包围
awk -f program-file [ -- ] file ...
# -f program-file表示将awk代码部分写在文件中,然后使用-f选项去引用这个文件
awk -e program-text [ -- ] file ...
# -e program-text也用于指定awk代码,与第一条语法等价,但是当既要引用文件,又要使用awk代码时,必须同时使用-f和-e
# 即: awk -f file -e 'awk_code' 而不是 awk -f file 'awk_code'

awk语法结构

awk语法结构即awk代码部分的结构。

awk的语法充斥着pattern{action}的模式,它们称为awk rule。

# 范例
awk 'BEGIN{n=3} /^[0-9]/$1>5{$1=333;print $1} /Alice/{print "Alice"} END{print "hello"}' a.txt
# 上面示例中,有BEGIN语句块,有END语句块,还有2个main代码块,两个main代码块都使用了正则表达式作为pattern。

关于awk的语法:

  • 多个pattern{action}可以直接连接连用

  • action中多个语句如果写在同一行,则需使用分号分隔

  • pattern部分用于筛选行,action表示在筛选通过后执行的操作

  • pattern和action都可以省略

    • 例如:awk '' a.txt

    • 例如:awk '/Alice/{}' a.txt

    • 例如:awk '/Alice/' a.txt等价于awk '/Alice/{print $0}' a.txt

    • 例如:awk '{print $0}' a.txt

    • 省略pattern,等价于对每一行数据都执行action

    • 省略代码块{action},等价于{print},即输出所有行

    • 省略代码块中的action,表示对筛选的行什么都不做

    • pattern{action}任何一部分都可以省略

pattern和action

对于pattern{action}语句结构(都称之为语句块),其中的pattern部分可以使用下面列出的模式:

# 特殊pattern
BEGIN
END

# 布尔代码块
/regular expression/    # 正则匹配成功与否 /a.*ef/{action}
relational expression   # 即等值比较、大小比较 3>2{action}
pattern && pattern      # 逻辑与 3>2 && 3>1 {action}
pattern || pattern      # 逻辑或 3>2 || 3<1 {action}
! pattern               # 逻辑取反 !/a.*ef/{action}
(pattern)               # 改变优先级
pattern ? pattern : pattern  # 三目运算符决定的布尔值

# 范围pattern,非布尔代码块
pattern1, pattern2      # 范围,pat1打开、pat2关闭,即flip,flop模式

action部分,可以是任何语句,例如print。

通过本文的介绍,相信读者对awk命令的基本使用方法和语法结构有了更深入的了解。无论是在数据处理、文本过滤还是格式化输出中,awk都能发挥出强大的功能。掌握awk的基本用法后,用户可以更加灵活高效地处理各种文本数据,从而提高工作效率和编程能力。希望读者能通过不断实践,进一步挖掘awk命令的潜力,提升在实际应用中的技巧和方法。

更多技术分享可以在蓝队云官网检索。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: