分类:
2010-10-19 18:22:46
awk 的功能非常强大,它是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支 持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文 本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配 的行显示到标准输出 (屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。
awk 有多个内置变量,下面我们以几个常用的内置变量来学习一下awk。
1.awk 会将正在处理的文件名放在一个内置变FILENAME里,这是我们在脚本中提取文件名非常的方便。FS 是字段分割符(默认为空格),OFS是输出字段(默认为一个空格),它的格式是 –v FS=:能用 –F : 指提取文件时以:段分割符,–v FS=+++++ 指输出时以++++为段分割符
为了实验方便,我们现在把passwd shadow 的前8行追加到两个文件中
2 在awk中 NF 显示段数,可以使用 ‘{print $NF }’ 打印文件一列, $(NF -1) 倒数第二段。
3 FNR 当前文件所处理的行号,NR 若处理多个文件,就把所以文件数相加,累加显示
4 RS 默认的换行符 ORS 定义输出换行符
5 awk 支持正则表达式,匹配表达式,关系表达式
关系表达式:可以对关系运算符进行操作,可以是字符串或数字的比较,如$2>$1 选择第二个字段比第一个字段长的行。
模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
BEGIN:是让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
END: 让用户在最后一条输入记录被读取之后发生的动作。
提取出文件中以,mail开头的行
提取出以mail或以bin开头的行
提取出以:为列分割符,第三列大于500的行
提取出第一列中 包含Root 或root 的行
提取出第一列中不包含root的行
把文件中第一列替换成root的
提取第一列等于root的行
/root/./mail/ 提取从root到mail之间的行
在awk中,ARGC 可以显示参数个数,ARGV 数组变量用来存储参数,从0开始
使用getline获取前面结果,
printf 定义格式化的输出,%3f 前面空三个字符,%3.1f 显示小数点后的一位,%3.2f 显示小数点以后的两位 可以四舍五入,%e 显示为科学计数法,%c显示为ASCII码