定义:
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk做大的优势。
来自: http://man.linuxde.net/awk
语法格式:
awk [options] ‘script‘ var=value file(s)
awk [options] -f scriptfile var=value file(s)
常用命令选项
-F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
-f scripfile 从脚本文件中读取awk命令 -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;
-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
awk模式和操作
模式
(1)/正则表达式/:使用通配符的扩展集
(2)关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
(3)模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
(4)BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理
操作
操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:
(1)变量或数组赋值
(2)输出命令
(3)内置函数
(4)控制流语句
参数:
NF:表示字段数,在执行过程中对应于当前的字段数
NR:表示记录数,在执行过程中对应于当前行的行号
实例:
echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk ‘{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}‘
注意:
(1)双引号拼接作用
print $NF:可以打印出一行中的最后一个字段
实例:
echo -e "line 1 f1 f2\nline 2 f3 f4" | awk ‘{print $NF}‘
f2
f4
awk ‘{print $1,$2}‘ filename:打印某一文件指定字段
实例:
last -n 3 | awk ‘{print $1,$3}‘
ouyangju 124.193.193.25
ouyangju 124.193.193.25
ouyangju 115.183.166.152
last | awk ‘END{print NR}‘ : 统计某以文本的总行数
将外部变量传递给awk
借助-v选项,可以将外部值传递给awk
实例:
var=10000;echo | awk -v VARTABLE=$var ‘{print VARTABEL}‘
10000
awk运算
算术运算
awk ‘BEGIN{a="b";print a++,++a;}‘
0 2
注意:
(1)操作数自动转换为数值,非数字类型转换成0
(2)在BEGIN进行
本文出自 “欧阳俊” 博客,请务必保留此出处http://ouyangjun.blog.51cto.com/10284323/1709309
原文:http://ouyangjun.blog.51cto.com/10284323/1709309