awk 用法小结 - - - by ruson 2006.4 NTU
1. awk 非常适合于结构化的文本文件(行、列数据)复杂处理。相对于 sed 而言,它可进
行复杂的编程处理,并且可以产生复杂的报表输出。
2. awk 通常有三个版本,旧 awk、nawk(新)、gawk。Solaris 下建议用 nawk,因为旧 awk
有很多功能不支持,例如数学运算幂 ^ ,函数 getline,system 等。
3. 基本语法:awk ‘pattern{action}’ filename
其中 action 内容可扩充,也可以有多个 action。
执行顺序:awk 一行行读入输入文件,顺序执行‘’内内容,按模式匹配来采取动作。
其他调用:awk 可用内部变量和函数,条件与循环语句,也可执行数学运算和字符串操
作。此外,可以使用 BEGIN 和 END 来执行处理前预操作和处理后后继操作。
A. 常用内部变量:NR(当前行数)NF(字段总数)$0(当前整行)$1(第一个记录)
FS(字段分隔符)OFS(输出字段分隔符)ORS(输出记录分隔符)
B.模式 pattern 可以是/ /包含的匹配形式,也是条件语句如$3<10
C.BEGIN(处理文件前的 action,常包含 FS、OFS 等)、END(处理文件后的 action)
D.条件与循环:if else(next,exit),for do while (continue,break)
E.数学运算符 + - * / % ^;数学函数 sin int;字符串函数 length index gsub substr 等
F.数组与关联数组:a[1]; a[$1]; a[$0]; a[b[i]]
F.输出重定向和管道:> >> | ;awk 内部命令:getline、system 等
4
.awk 的三种调用方式: X awk ‘pattern{action}’ filename1,filename2
Y awk –f myscript.awk filename1,filename2
Z #!/bin/nawk –f … … 执行:myscript.awk filename
特别注意事项:
----------------------------------------------------------------------------------------------------------------------
A.从 window 拷贝语法句到 Unix 中,行结尾可能有不识别的字符会导致语法错误
B.写 script 文件时,BEGIN 或 END 后必须紧跟{
C.所有 action 语句必须放在{ }中,否则提示语法错误。例如不可直接写 print
D.单独的赋值或 pattern 条件句没有{ }则默认 print $0;例如{ }外面的 i=1
E.if 条件块必须放在 action 中,也就是必须要有{ }来包含
F.条件的判断“相等”须用= =,而不是=(赋值);例如,if($1= =100)
G.输出多列须用“,”(逗号)隔开;for 循环中间隔符为“;”而不是“,”
实例演练:(filename 为以下文件,注意:第二列用“-”隔开而非空格,以避免与 FS 冲突)
ID Name Age City Country Tel Salary Children
1001 Steven 25 NY U.S.A +01-02-323222 $4900 2
1002 Huang-Yu 30 BJ CHN +86-10-36789966 ¥6000 1
1003 Fish-Mad 27 SG SG +65-67456632 $3000 3
1004 Vale-Kiss 46 LD ENG +44-20-87634321 $6280 3
----------------------------------------------------------------------------------------------------------------------
以下分基础实例:1.无 pattern 的 action 实例 2.有 pattern 的 action 实例
3.BEGIN,END,FS,OFS 实例 4.if else; for while 循环实例
5.数学运算与字符串操作实例
高级实例:6.数组与关联数组运用实例 7.多文件运用 NR FNR 实例
8.输出重定向和 getline 实例
1
评论1