awk是一种用于处理数据和生成报告的编程语言。常用脚本管理小型数据库的自动化处理。
awk是三个姓的首字母,代表三位作者:Alfred
Aho,Brian Kernighan,Peter Weinberger。
工作原理:
1.
逐行扫描文件,从第一行到最后一行,查找匹配某个特殊模式(如果有)的文本行,并对这些行执行指定动作(括在大括号内);
2.
如果没有模式说明,则指定动作对所有行生效(处理所有行);
3.
如果没有指定动作,则对匹配到的行输出到屏幕上。
命令格式:awk [ 'pattern' | '{action}' | '/pattern/{action}' ]
filename
eg: awd
‘/hello/{print}' file1
#打印file1中包行“hello”字符串的行。
1.
pattern:匹配模式,某种表达式组成的语句。如果某个表达式中虽然没有出现关键字if,但是计算它的时候却想到了if这个词,那么这个表达式就是模式,一般是正则表达式、判别条件真伪的表达式或者两者的组合构成。
eg:awk ‘/Tom/‘
file2
#正则表达式写在“/”“/”之间
eg:awk ’$3<4000'
file3
2.
action:指定动作,由括在大括号内的一条或者多条语句组成,语句之间用分号“;”或者换行符“ \n
”分割。如果动作前面有个匹配模式,则表示匹配成功才执行该动作。
3.filename:数据来源。如果没有,则表示数据从stdin输入,可能是键盘,也可能是管道。
管道输入:command | awk命令
eg:cat /etc/passwd
| awk ‘/^root/{print $1}
#
打印/etc/passwd文件中root开头的行的第一个字段(默认以空格符分割)。
awk常用命令:
-f
指定[ '/pattern/' | '{action}' | '/pattern/{action}' ]脚本,类同于sed的-f
-F
指定分割符,默认是空格。 eg: -F:
指定以“:”作为分割符。
指定多个分割符
-F‘[分割符1分割符2...]'
eg:-F'[
:/]
指定以空格:/作为分割符,无论遇到哪个,都作为一个新字段field。
如
hello ha:tomorrow/night,have
分割成
"hello","ha","tommorrow","night,have"四个字段
其他常用基本用法:
1. 匹配操作符: ~
用于对记录或者字段的表达式匹配
eg: awk ‘$1
~ /[Bb]ill/' file1
#输出第一字段包含bill或者Bill的行
2.
非:!
eg: awd
‘ ‘$1 !~
/[Bb]ill/'
file1
#输出第一字段不包含bill或者Bill的行