一,概述
AWK 是一种用于处理文本和数据的编程语言,特别擅长用于处理格式化文本文件。它通过将输入数据分成字段,逐行进行处理,广泛应用于数据分析、文本处理和系统管理中。
二,使用方式
命令模式(重点)
AWK 可以直接在命令行中运行,适合执行一些简短的文本处理任务。基本格式如下:
awk 【选项】 '条件 {动作}' 文件名
-F:定义字段的分隔符,默认空格
-v:定义变量并赋值
awk -F : '{print $1,$3,$NF}' a.txt 如果分隔符为默认的空格的话就不要写-F了
脚本模式(了解)
复杂的 AWK 程序可以写入一个脚本文件,通过 -f
选项执行。
awk -f script.awk 文件名
三,工作原理
AWK 的工作原理是逐行读取文件,将每行内容分割成字段,并根据指定的条件进行相应的操作。它通常分为三大块:
BEGIN
:在处理文件内容前执行的语句。- 主体:逐行处理数据。
END
:在处理文件内容后执行的语句。
四,内部变量(重点)
AWK 提供了一些内置的内部变量,用于控制和访问数据:
-
$0
:当前行的内容。 -
-
$1
、$2
…:当前行的第一个、第二个字段 -
$NF:当前行的最后列
-
-
NF
:当前行的字段数。 -
-
NR
:当前处理的行数。 -
-
FS
:字段分隔符(默认为空格)命令行中使用-F 符号 形式或者放到{内}。-
在 AWK 中,
FS
应在BEGIN
块中设置,或者直接通过-F
参数设置,这样才能在文件读取前生效。
-
-
OFS:输出字段分隔符(默认空格)放到{OFS="分隔符"}
-
RS
:记录分隔符(默认为换行符)。 -
五,自定义变量
六,begin-end语法(重点)
语法
BEGIN { 初始化代码 }
{ 主体代码 }
END { 收尾代码 }
七,awk结合正则表达式(重要)
AWK 可以结合正则表达式来进行复杂的数据匹配。例如,匹配以特定字符开头的行或包含特定模式的字段。
awk '/正则表达式/ {动作}' 文件名
算术运算符
+
:加法,例如x + y
-
:减法,例如x - y
*
:乘法,例如x * y
/
:除法,例如x / y
%
:取模,例如x % y
++
和--
:自增和自减,适用于变量,例如x++
和--y
比较运算符
用于比较两个值,常用在条件判断中:
==
:等于,例如$1 == 10
!=
:不等于,例如$2 != "text"
>
和<
:大于和小于,例如$3 > 5
>=
和<=
:大于等于和小于等于
逻辑运算符
用于组合条件:
&&
:逻辑与(AND),当两个条件都为真时返回真。
awk '$1 > 10 && $2 < 20 {print $0}' file.txt
||
:逻辑或(OR),当至少一个条件为真时返回真。
awk '$1 > 50 || $2 < 5 {print $0}' file.txt
!
:逻辑非(NOT),将条件的真假性取反。
awk '!/error/ {print $0}' file.txt
正则运算符
~
:匹配运算符,用于检测字段是否符合某个正则表达式。
awk '$1 ~ /^[A-Z]/ {print $0}' file.txt # 第一个字段以大写字母开头
!~
:不匹配运算符,检测字段是否不符合某个正则表达式。
awk '$1 !~ /error/ {print $0}' file.txt # 第一个字段不包含 "error"
八,流程控制
AWK 提供了 if
、else
、while
、for
等控制语句来实现复杂的逻辑判断和数据处理。
流程控制
{ if (条件) {动作} else {其他动作} }
循环控制
{ for (i=1; i<=NF; i++) {print $i} }