AWK完整笔记
来源:互联网 发布:淘宝怎么才能排名靠前 编辑:程序博客网 时间:2024/05/01 20:50
Awk是一种文本处理工具,不仅是Linux中也是任何环境中现有功能最强大的数据处理引擎之一;
AWK提供的功能:样式装入,流控制,数学运算符,进程控制语句甚至内置的变量和函数;具备完整语言的几乎所有精美特性.
AWK拥有自己的语言:AWK程序设计语言,定义为:样式扫描和处理语言;
允许创建简短的程序,这些程序读取输入文件,为数据排序/处理数据/对输入执行计算/生成报表
基础是:只要输入数据中有模式匹配,就执行一系列指令.
所以命令的语法始终是:awk ‘{pattern + action}’
gawk是AWK的GUN版本;
如果UNix作业系统中中本身没有AWK功能,可通过anonymous ftp到下列地方取得:
phi.sinica.edu.tw:/pub/gnu
ftp.edu.tw:/UNIX/gnu
prep.ai.mit.edu:/pub/gnu
总结:模式匹配语法特别有用,通常用于数据检索和数据转换
AWK的调用方式:
awk命令行,可以像unix命令一样使用awk
使用-f选项调用awk程序。awk允许将一段awk程序写入到一个文本文件中,然后用awk –f 调用和执行这段程序.
命令解释器调用awk程序;利用unix支持的命令解释器功能,可以将一段awk程序写入到文本文件中,第一行写上:
#!/bin/awk –f
赋予文件执行的权限。这样做之后,命令行中可以用类似下面的方式调用并执行这段程序了:
awk脚本文件名 待处理文件
AWK语法:
如同其他的UNIX命令,AWK语法如下:
awk [-F re][parameter…][‘prog’][-f progfile]
参数说明:
-F re:允许awk更改其字段分隔符;
parameter:该参数帮助为不同的变量赋值;
‘prog’:awk的程序语句段,必须用’’隔开,以防止为shell解释。这个程序语句段的标准形式为:’pattern’
其中pattern参数可以是egrep正则表达式中的任何一个,它可以使用语法/re/再加上一些样式匹配技巧构成.与sed类似,可以使用”,”分开两样式以选择某个范围。(参考:grep和sed技术)。action参数总是被大括号包围,它由一系列awk语句组成,各语句之间用”;”分隔。awk解释它们,并在pattern给定的样式的记录上执行其操作。与shell类似,你也可以用”#”作为注释符,解释执行时,它们将会被忽略。你可以省略pattern和action之一,但不能两者同时省略,当省略Pattern时没有样式匹配,表示对所有记录均执行操作,省略action执行缺省的操作-在标准输出上显示;
-f progfile:允许awk调用并执行progfile指定的程序文件。progfile是一个文本文件,必须符合awk的语法
in_file:awk的输入文件,awk允许对多个输入文件进行处理。awk不修改输入文件。如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重定向。
Awk的记录,字段和内置函数
和grep与sed不同的是,awk能够支持对记录和字段的处理;
默认情况下:awk将文本的一行视为一个记录;某一部分作为一个字段;
为了操作这些字段,awk借用了shell的方法,用1,2,3…这样的方式来顺序地表示行(记录)中的不同字段。特殊的,awk用0表示整个行(记录)。
不同的字段之间用分隔符的字符分隔开,系统默认的分隔符是空格。awk允许用-F re的形式来改变这个分隔符。事实上,awk内置变量FS来记忆这个分隔符(RS 记录分隔符变量,当前工作的记录数NR等 你可以利用NR在模式中指定工作范围,可以使用RS指定特殊的分隔符作为记录的分隔符)
eg: awk –F % ‘NR==5 NR==15 {printf $1 $3 $7}’ 将文件中以%作为字段分隔符的记录的第5行到第15行中的记录作为处理范围,在标准输出流中分别打出第1,3,7个字段
或者说,将文件中的第五行到十五行中以%分隔的1,3,7字段显示出来
Awk的内置函数
awk使用了一系列类C的内置字符串处理函数
例如:printf: awk的printf完全可以照C语言的模式使用awk中的printf
显示myfile中的行号和第3字段
awk ‘{printf”%03d%s/n”,NR,1} ’
Awk的命令行使用
egs:
eg1:显示文本文件mydoc匹配(含有)字符串’google’的所有行
awk ‘/google/’ mydoc
由于显示整个记录(全行)是awk的缺省动作,因此可以省略action项。
eg2:显示一个Sun(sun)出现行和第一个Moon(moon)出现行之间的行
awk ‘/[Ss]un/,/[Mm]oon/’ myfile
eg3: 显示内置变量和内置函数:显示myfile中所有行字符超过80个字符的行号
awk ‘length($0)>80 {print NR}’ myfile
eg4: UNIX用户进行安全性检查,方法:考察/etc/password文件,检查其中passwd字段(第二字段)是否为’*’,如不为’*’,表示该用户没有设置密码,显示出这些用户名(第一字段)
awk –F: ‘$2==”” {printf(“%s no password!”,$1)}’ /etc/password
awk内置变量详细介绍:
argc 命令行参数个数(不包括awk的选项和awk的程序内容)
argv 命令行参数序列数组,下标从0开始
argind 当前正在处理的argv中文件的索引值(同时处理多个文件会用到)
convfmt 数字转化格式,和C语言中的数字输出格式化类似,默认为”%.6g”
environ 当前环境的环境变量
errno 出错时错误信息
fieldwidths 以空格分隔的字符宽度,如果指定此变量,awk将会用指定的宽度替换变量FS置顶的分隔符,egs:
fieldname 当前正在处理的文件名,该变量不能在begin中使用
fnr 当前正在处理的记录号
fs 字段的分隔符,默认为空格
ignorecase 如果该变量设置为0值,在进行字符串匹配时忽略大小写;
NF 当前记录中的字段个数
NR 已经读出的记录数
OFMT 数字的输出格式
OFS 输出的字段分隔符,默认为空格
ORS 输出的记录分隔符,默认为新行
RS 输入记录的分隔符,默认为新行
RSTART 被match()函数匹配的字符串的起始位置,如果没有匹配则为0(从1开始)
RLENGTH 被match()函数匹配的字符串的长度
SUBSEP 数组中多个下标的分隔符,默认为"/034"
Awk的变量:
awk的设置变量要求,1)使用时必须在前面增加””, 2)不能和内置变量重名3)不需要初始化和指定类型;
运算:
+,-,*,/,%,等,++,--,+=,-=等,运算函数(log,sqr,cos,sin等),字符串运算(length,substr)
关系判断:
==,!=,>,=,>=; 样式匹配:~匹配于 !~ 不匹配于
逻辑运算符:
!,&&,||,()
AWK的流程控制
1. begin 和 end
在awk中两个特别的表达式,begin和end,这两者都可以用于pattern中
eg:累计销售文件中的xs中的销售金额(假设销售金额在记录的第三字段)
awk
>‘BEGIN(FS=”:”;print “统计销售金额”;total=0)
> {print $3; total=total+$3;}
>END(printf “销售金额总计:%2f”,total)’ sx
(注:>是shell提供的第二提示符,如要在shell程序awk语句和awk语言中换行,则需在行尾加反斜杠/)
2.流程控制语句:
if else; 支持{}
while ; do while ; for
break,continue控制流程走向
AWK自定义函数
原始的awk并不提供函数功能,只有在nawk或者awk版本中才可以增加函数;
函数定义:
function 函数名(参数表){
}
gawk中允许将function省略为func;
函数调用时不执行参数有效性检查;
awk函数有两种返回方式:隐式返回和显式返回
eg:
nawk:
>’BEGIN{pageno=1;file=FILENAME}
>pageno=print_header(file,pageno);
>printf(“当前页号:%d/n”,pageno);
>}
>#定义函数print_header
>function print_header(FileName,PageNum){
> printf(“%s %d/n”,FileName,PageNum);
> PageNum++;
> return PageNum;
>}’ myfile
‘
Awk的高级输入输出
1. 读取下一条记录:
next
2 getline(成功1,失败0)
{
while(getline==1){
#process the inputted fields
}
}
printf(“hello word!/n”)>>”datafile”
3 输入到一个命令
printf(“hello world!/n”)|”sort -t”
awk和script混合编程
备注:是对 http://baike.baidu.com/view/209681.htm?fr=ala0_1_1 个人性的总结性笔记
别晓峰
- AWK完整笔记
- awk笔记
- AWK 笔记
- awk笔记
- AWK笔记
- awk 笔记
- Awk笔记
- awk笔记
- awk笔记
- awk笔记
- awk笔记
- awk笔记
- awk笔记
- awk笔记
- awk笔记
- awk 笔记
- awk笔记
- awk sed 笔记--awk 1
- 跟踪鼠标:一串图片跟着鼠标运动,如果图片做得好,可以有很好的效果
- 压缩感知——CS
- 走进无限美妙的数学世界
- 动态调用WebService(C#)
- Javascript的鼠标样式技术文章
- AWK完整笔记
- oracle表空间查询
- 串口调试--COM1没有发现,或被其他设备占用 的解决办法
- VC++ MFC DLL动态链接库编写详解
- 显示和隐藏div
- 多线程编程的注意事项
- 浙大ACM-ZOJ 1115
- 带OAuth的twip安装手记
- 怎么对待自己的工作