AWK
简介:
Awk是一种便于使用且表达能力强的程序设计语言,可应用于各种计算和数据处理任务。本章是个入门指南,让你能够尽快地开始编写你自己的程序。第二章将描述整个语言,而剩下的章节将向你展示如何使用Awk来解决许多不同方面的问题。纵观全书,我们尽量选择了一些对你有用、有趣并且有指导意义的实例。
参考资料:
http://awk.readthedocs.io/en/latest/
学习总结:
【基本格式】
awk '操作' 文件名
【常用系统变量及函数】
NF:字段变量,在一行中,将字段分成若干个字段,$1 ~ $NF ($0 代表一整行 "this is awk" $0 = "this is awk",$1 = "this",$2 = "is",$NF=$3="awk" )
NR:统计行号,类似于wc -l
length():返回字段的长度 length($2) 返回第二个字段的字符串长度
, : 逗号表示\t 表示空格,{print $1,$2}会输出相应的答案$1 $2,像{print $1 $2}则是不可以的。
【基本操作】
统计日志文件中满足某条件的日志行数 :awk '$1==1 {emp = emp + 1} END {print emp} ' logfile
求数据文件中平均值(利用NR)或sum值: awk ' {sum = sum + $1} END {print sum / NR}' datafile NR是变值,比如awk处理第一行NR就是1,处理第n行NR就是n
求数据文件中的某一项的最小(大)值 :awk '$3 < min {min=$3}END{print min}' datafile
控制&循环语句:if while for效仿C语言,它们仅可以在动作中使用。
数组:数据给予了awk超强的能力,结合各种循环判断,结合NR使用更佳。例子,输出数据文件最后十行的第二个字段:awk '{ attr[NR]=$0 }END{ for(i=NR;i>=NR-10;i–){ print attr[i] } }' datafile
【模式】
-
BEGIN{ 语句 }
什么鬼没用过,好像有一次记混了还给用错了,禁奥义(在读取任何输入前执行一次语句)
-
END{ 语句 }
读取所有输入之后执行一次语句。
eg:awk '$1==0{sum=sum+1}END{print sum}' datafile 在数据文件中第一个字段为0的总数。
-
表达式{ 语句 }
对于表达式为真的行,执行的语句。
eg:同END
-
/正则表达式/{ 语句 }
如果输入行包含字符串与正则表达式相匹配,则执行的语句。
-
( 组合模式 ){ 语句 }
一个 组合模式 通过与(&&),或(||)以及括弧来组合多个表达式;对于组合模式为真的每个输入行,执行语句。
eg:awk '($1==1||$1==0){sum=sum+1}END{print sum}' datafile 在数据文件中第一个字段为0或者1的总数。
-
模式1,模式2 { 语句 }
同时匹配多个模式然后执行语句,模式指以上五种模式。