awk简介
awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。(对文本进行操作)
思考:学awk基本使用可以以sql思想来学习
- 使用方法
awk '{pattern + action}' {filenames}
其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本
所有输出都发送到 stdout,所得到的结果与执行 cat /etc/passwd 完全相同。
现在,解释{ print }代码块。在 awk 中,花括号用于将几块代码组合到一起,这一点类似于 C 语言。在代码块中只有一条 print 命令。在 awk 中,如果只出现 print 命令,那么将打印当前行的全部内容。
再次说明, awk 对输入文件中的每一行都执行这个脚本。
常用 awk 内置变量
awk '{if(NR>=20 && NR<=30) print $1}' test.txt #打印出文本中[20,30]行的第一列
模式和动作
- 模式
- 模式–》可以是任何条件语句或正则表达式。
- 模式包括两个特殊字段 BEGIN和END
若不指明模式,awk总是匹配或打印行数
- 动作
- 实际动作在大括号{}内指明。动作大多数用来打印
若不 采取动作,awk总是打印出所有浏览出来的记录。
awk错误处理
由于awk提示一言难尽,以下是总结
- 确保整个awk命令用单引号括起来。
- 确保命令内所有引号成对出现。
- 确保用花括号括起动作语句,用原括号括起条件语句
- 可能忘记使用花括号,也行你认为没有必要,但awk不这样认为,每种语言都有自己的解析器,将按之解释语法
awk使用正则---->模式
- 这里的正则使用斜线括起来
正则都有元字符
\
^
$
.
? 匹配0次或1次 例如 /XY?Z/ 匹配XYZ XZ
*
+ 匹配一个或多个字符(不适用于grep和sed)
[]
条件操作符 —》pattern
1. 匹配
为使一域名匹配正则表达式
- 使用符号’~'后紧跟正则表达式,
- 也可以用if语句。awk中if后面的条件用()括起来。
精确匹配
grep 使用-w
不匹配
sed
将所有包含TEXT_TO_BE_REPLACED字符串的行替换为This line is removed by the admin.
sed 's/.*TEXT_TO_BE_REPLACED.*/This line is removed by the admin./g'