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的行