Contents
  1. 1. 一、awk调用方式
  2. 2. 二、awk脚本
  3. 3. 三、awk操作符
  4. 4. 四、内置的字符串函数
  5. 5. 五、字符串屏蔽序列

AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。

一、awk调用方式

1、awk [-F field-separator] ‘commands’ input-file(s)

commands 是真正的awk命令

-F 为域分隔符

2、第二种方法是将所有a w k命令插入一个文件,并使a w k程序可执行,然后用a w k命令解释

器作为脚本的首行,以便通过键入脚本名称来调用它。

3、第三种方式是将所有的a w k命令插入一个单独文件,然后调用:

awk -f awk-script-file input-files(s)

-f选项指明在文件awkscriptfile中的awk脚本, inputfile(s)是使用awk进行浏览的文件

名。

二、awk脚本

1、awk由模式和动作组成,模式部分决定动作语句何时触发及触发事件

模式可以是任何条件语句或复合语句或正则表达式。 模式包括两个特殊字段BEGIN和END

如:

awk ‘BEGIN{print “Name\n——-“}{print $1}END{“end-of-report”}’

2、域和记录

awk执行时,其浏览域标记为$1、$2…$n

$0指所有域

保存awk输出

(1)、awk ‘{print $0}’ grade.txt >wow 即内容重定向

(2)、使用tee命令 awk ‘{print $0}’ grade.txt | tee wow 既显示有写入文件

3、元字符

\ ^ $ . [] | () * + ?

其中:

+使用+匹配一个或多个字符

? 匹配模式出现频率。例如使用/XY?Z/匹配XYZ或YZ

4、条件操作符

< 小于

>= 大于等于

<= 小于等于

~ 匹配正则表达式

== 等于

!~ 不匹配正则表达式

!= 不等于

(1)、awk ‘{if($4~/Brown/) print $0}’ grade.txt

其中if后面的条件用()括起来

(2)、设置大小写 awk ‘/[Gg]reen/‘ grade.txt

(3)、任意字符awk '$1~/^...a/' grade.txt

(4)、或关系匹配 awk ‘$0~/(Yellow)|(Brown)/‘ grade.txt

各表达式互相结合起来的表达式:

&& AND : 语句两边必须同时匹配为真。

|| OR:语句两边同时或其中一边匹配为真。

! 非求逆

5、内置变量

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行- F选项

NF 浏览记录的域个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

三、awk操作符

= += *= / = %= ^ = 赋值操作符

? 条件表达操作符

|| && ! 或、与、非(上一节已讲到)

~!~ 匹配操作符,包括匹配和不匹配

< <= == != >> 关系操作符

+ - * / % ^ 算术操作符

+ + -- 前缀和后缀

1、设置输入域到域变量名

cat crontab.bak | awk ‘BEGIN{numall=20}{if($1~/[0-9]*/ && $i>numall && NR < 10) num+=$1} END{print num}’

四、内置的字符串函数

gsub(r,s) 在整个$ 0中用s替代r

gsub(r,s,t) 在整个t中用s替代r

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

sub(r,s) 用$ 0中最左边最长的子串代替s

substr(s,p) 返回字符串s中从p开始的后缀部分

substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

实例:

1、awk ‘ BEGIN{numall=10}{gsub(12,20);if($1~/[0-9]*/ && NR < 10) num+=length($0);print substr($0,1,index($0,”=”));} END{print num}’

2、awk ‘BEGIN {print split(“123#456#678”,myarray,”#”)}’

awk ‘BEGIN { split(“123#456#678”,myarray,”#”);print myarray[2]}’

五、字符串屏蔽序列

\b 退格键 \t tab键

\f 走纸换页 \ddd 八进制值

\n 新行 \c 任意其他特殊字符,例如\为反斜线符号

\r 回车键

1、printf修饰符

- 左对齐

Width 域的步长,用0表示0步长

.prec 最大字符串长度,或小数点右边的位数

%c ASCII字符

%d 整数

%e 浮点数,科学记数法

%f 浮点数,例如(123.44)

%g awk决定使用哪种浮点数转换e或者f

%o 八进制数

%s 字符串

%x 十六进制数

如:awk ‘{printf “%-15s %s”,$1,$3}’



本文转载awk学习整理和使用实例

Contents
  1. 1. 一、awk调用方式
  2. 2. 二、awk脚本
  3. 3. 三、awk操作符
  4. 4. 四、内置的字符串函数
  5. 5. 五、字符串屏蔽序列