awk最基本的功能是搜索文件中的匹配某一字符串的文本行,并可对匹配行执行指定的动作(Action).
1. awk 脚本或者说程序的基本格式是
pattern { action }
pattern 指定了匹配规制, action指定了对匹配行将进行的操作.
2. 脚本的使用方式:
a) 在shell命令行中, 将脚本作为awk的参数执行. 脚本用单引号包含.如
awk ' /abc/ { print } ' foo.txt
其中 /abc/ 为 pattern, print 为执行的操作, foo.txt为待搜索的文件.
b) 将脚本写入文件中, 通过awk -f 选项指定, 如:
awk -f aaa foo.txt
其中的aaa文件中,就是包含了脚本的文件.
c) 自执行脚本文件, awk 脚本, 同样可以想shell, perl等脚本一样, 直接在shell命令行上执行,而不需要前面加上awk, 如:
./aaa.awk foo.txt
不过对于aaa,需要在开头指定执行脚本的程序,这个跟perl等类似, 就是使用#!制定命令路径, aaa.awk文件内容如下:
#!/usr/bin/awk -f
/abc/ { print }
3. 实用例子
awk 脚本的 pattern 和 action 可以只包含其中的一个,如果pattern为空, 则对输入文件的每一行都进行操作, 如果action部分为空( {} 也不写), 则执行缺省操作--打印文本行
pattern BEGIN 表示文件开头, END 表示文件结尾
a) 输入文件中最长文本行的长度
awk ’{ if (length($0) > max) max = length($0) }
END { print max }’ inputfile
b) 打印文件中,长度超过80的行
awk ' length($0) > 80 ' inputfile
缺省动作为print, 所以省略
c) 打印字段数大于1的行
awk ' NF>1' inputfile
d) 打印当前目录, 所有文件大小的和
ls -l | awk ' { x += $5 }
END { print "total bytes : " x }'
e) 打印输入文件的行数
awk ' END { print NR } ' inputfile
f) 打印偶数行
awk 'NR%2==0' inputfile