1). awk逐行扫描文件,寻找匹配行,awk pattern {action}
2). 读取文件内容的每一行时,将对比改行是否与给定的模式相匹配,
如果匹配则执行处理过程,否则对该行不做任何处理。
如果没有指定处理脚本,则把匹配的行显示到标准输出,即默认处理动作是print打印行;
如果没有指定模式匹配,则默认匹配所有数据。
3). BEGIN 和 END
-F 设置匹配分割符,默认是 空格 或者 tab. eg: -F stu 默认以stu为1段
需要用begin,在处理第一行之前 就指定。
eg:echo 'hello the :world,!' | awk 'begin {FS="[:,]"} {print $2}'
$0:默认是该行 $1:默认是分割的第一个元素eg:echo 'hello world' | awk 'BEGIN {FS="[,:]"} {print $1}'
NF 默认是统计总个数 '{print NF}' 为2 '{print $NF}'为 world 因为NF为2 $NF=$2 为该行的最后一个字段
以下为awk内置变量:
ARGC 命令行参数个数
FILENAME 当前输入文档的名称
FNR 当前输入文档的当前记录编号,尤其当有多个输入文档时有用
NR 输入流的当前记录编号
NF 当前记录的字段个数
FS 字段分隔符
OFS 输出字段分隔符,默认为空格
ORS 输出记录分隔符,默认为换行符\n
RS 输入记录分隔符,默认为换行符\n
awk 'BEGIN {FS="\n"; RS=" "} {print $3}' test3.txt 解释: 以换行作为第一个检索条件 在换行中以空格作为第二个检索条件 打出第三个变量的值
运算 awk -F: '$1~/root/ {print $3}' /etc/passwd
初始值都为0,字符操作一定得加引号
运算符号:除了常见的, ~ 匹配 !~ 不匹配
awk -F: '$3>500 {print $1}' /etc/passwd awk -F: '$1~/root/ {print $3}' /etc/passwd
awk条件及循环语句
df | grep 'boot' | awk '{if($4 < 2000) print "alert";else print "ok"}'
注意点:1 awk 必须用单引号和大括号包起来
2 print 中内容 如果为变量不用引号,否则为双引号
3 if else 中见有 分号 分割,以及多条命令中间也是分号分割 FS="\n"; RS=" "
4 多个变量中间是用,号分割
for