Chinaunix首页 | 论坛 | 博客
  • 博客访问: 705735
  • 博文数量: 90
  • 博客积分: 3225
  • 博客等级: 少校
  • 技术积分: 1200
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-20 11:04
个人简介

菩提本无树,明镜变非台 本来无一物,何处惹尘埃

文章分类

全部博文(90)

文章存档

2015年(1)

2014年(12)

2013年(15)

2012年(31)

2011年(8)

2010年(23)

分类: LINUX

2012-05-07 11:31:17


目录









awk 用于格式化报文或从一个大的文本文件中抽取数据包

命令行原型: awk [-F fild-separator] 'commands' input-file(s)
脚本文件形式: 文件名命令形式: file_name.awk
                         文件首行写上:  #!/bin/awk -f

1 抽取域
域标识:$1,$2,$3.....$n
所有域:$0

2 匹配正则表达式
awk的正则表达式用'/'括起来,如果要匹配某个域标识或变量时,要在变量后加'~'再接正则表达式。
2.1 条件操作符
符号 含义
 <   小于
 <=   小于等于
 >   大于
 >=   大于等于
 ==   等于
 !=   不等于
 ~   匹配正则表达式
 !~   不匹配正则表达式
2.2 为使域号匹配正则表达式,使用符号'~'后紧跟正则表达式

3 向awk传递参数
3.1内置变量
变量名 含义
 ARGC   命令行参数个数
 ARGV   命令行参数排列
 ENVIRON   支持队列中系统环境变量的使用
 FILENAME   awk浏览的文件名
 FNR   浏览文件的记录数
 FS   设置输入域分隔符,等价于命令行-F选项,
一般在脚本的BEGIN上使用
 NF   浏览记录的域个数
 NR   已读的记录数
 OFS   输出域分隔符
 ORS   输出记录分隔符
 RS   控制记录分隔符

4 内置字符串函数
变量名 用途
 sub(r,s)  用$0中最左边最长的子串s代替r
 gsub(r,s)  在整个$0中用s替代r
 gsub(r,s,t)  在整个t中用s替代r
 substr(s,p)  返回字符串s中从p开始的后缀部分
 substr(s,p,n)  返回字符串s中从p开始长度为n的后缀部分
 index(s,t)  返回s中字符串t的第一位置
 length(s)  返回s长度
 match(s,r)  测试s中是否包含匹配r的字符串
 split(s,a,fs)  在fs上将s分成序列a
 sprint(fmt,exp)  返回经fmt格式化后的exp

5 转义字符'\'
转义字符
含义
 \b  退格键
 \t  tab键
 \f  走纸换页
 \ddd  八进制值对应字符
 \n  换行
 \r  回车键
 \c  c为任意其他特殊字符
例如\\显示为反斜线符号

6 awk输出函数printf的输出格式
变量名 含义
 -  左对齐
 width  域的长度
 .prec  最大字符串长度,或小数点右边的位数
 %c  ASCII字符
 %d  整数
 %e  浮点数,科学记数法
 %f  浮点数
 %g  awk决定使用哪种浮点数转换e或者f
 %o  八进制数
 %s  字符串;
 %x  十六进制
注:跟C语言的printf中的格式差不多

7 awk中的数组与记录
数组遍历为:for(element in array) {print element; print array[element]}
其中element为记录,可以是数字也可以是字符(串);

注意:
a 确保整个awk命令用单引号括引来;
b 确保命令内所有引号、括号成对出现;
c 确保用"{}"括起来动作语句,用"()"括起条件语句;
d awk中的$与shell提示符$是不同的;


阅读(1909) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~