当前位置: 首页 > 工具软件 > Gawk > 使用案例 >

gawk详解(一)

齐招
2023-12-01
gawk详解
gawk能够用很短的程序对文档里的资料做修改、比较、提取、打印等处理。
它不仅是一个编程语言,它还是Linux系统管理员和程序员的一个不可缺少的工具。
gawk是GNU计划下所做的awk,gawk最初在1986年完成,之后不断地被改进、更新。
gawk包含awk的所有功能。

1)gawk的执行方式
gawk程序很短,则可以将gawk 直接写在命令行
例如:gawk 'pattern/action' input-file1 input-file2 ...
gawk程序较长,则应该将gawk程序存在文件中,用gawk解释器执行
例如:gawk -f script-file input-file1 input-file2 ...
当有多个脚本文件时应当以据执行顺序排列
例如:gawk -f script-file1 -f script-file2 ... input-file1 input-file2 ...

2)模式和动作
在gawk中每一个命令都由两部分组成:模式(pattern)和相应的动作(action)。
只要模式符合,gawk就会执行相应的动作。模式部分yin应该用两个斜杠括起来,动作部分用一对花括号括起来。
例如:
    /pattern1/ {action1 }
    /pattern2/ {action2 }
    /pattern3/ {action3 }
其中模式或动作都能够被省略,但是两个不能同时被省略。
如果模式被省略,则对于作为输入的文件里面的每一行,动作都会被执行。
如果动作被省略,则缺省的动作被执行,既显示出所有符合模式的输入行而不做任何的改动。

3)逻辑和数值运算
gawk基本逻辑运算:
== 相等
!= 不相等
> 大于
< 小于
>= 大于等于
<= 小于等于
例如:gawk '$4 > 100' testfile    (显示文件testfile 中那些第四个字段大于100的记录)
gawk基本数值运算符:
+ 加法
- 减法
* 乘法
/ 除法
^ 乘方
% 求模
例如:gawk '{print $4/2}' testfile    (显示第4个字段被2除的结果)
在gawk中,运算符的优先级和一般的数学运算的优先级一样。如果不确定的话可以用小括号改变优先次序。

4)内部函数
gawk中有各种的内部函数,现在介绍如下:
随机数和数学函数
sqrt(x) 求x的平方根
sin(x) 求x的正弦函数
cos(x) 求x的余弦函数
log(x) 求x的自然对数
int(x) 求x的整数部分
rand() 求0和1之间的随机数
srand(x) 将x设置为rand()的种子数

字符串的内部函数
index(find,in) 在字符串"find"中寻找"in"第一次出现的位置,返回值是字符串"in"出现在字符串find"里面的位置。如果没有超找到则返回0。
length(string) 求出string的长度。
match(string,regexp) 在字符串string中寻找符合regexp的最长、最靠左边(正则表达式默认是贪婪的)的子字符串。
    返回值是regexp在string的开始位置,即index值。
    match函数将会设置系统变量RSTART等于index的值,系统变量RLENGTH等于符合的字符个数。如果不符合,则会设置RSTART为0、RLENGTH为-1。
sprintf(format,expression1,. . . )和C语言的printf类似,但是sprintf并不显示,而是返回字符串。
sub(regexp,replacement,target) 在字符串target中寻找符合regexp的最长、最靠左的地方,以字串replacement代替最左边的regexp。
gsub(regexp,replacement,target) 与sub类似。在字符串target中寻找符合regexp的所有地方,以字符串replacement代替所有的regexp。
substr(string,start,length) 返回字符串string 的子字符串,这个子字符串的长度为length,从第start个位置开始。
    如果没有length ,则返回的子字符串是从第start 个位置开始至结束。
tolower(string) 将字符串string的大写字母改为小写字母。
toupper(string) 将字符串string的小写字母改为大写字母。

I/O的内部函数
close(filename) 将输入或输出的文件filename关闭。
system(command) 此函数允许用户执行操作系统的指令,执行完毕后将回到gawk程序。

5)格式化输出
借用C语言的格式化输出指令,可以让gawk的输出形式更为多样。这时,应该用printf而不是print。
例如:gawk '{printf "%5s likes this language/n",$2 }' testfile

p r i n t f中的%5s 部分告诉gawk 如何格式化输出字符串,也就是输出5个字符长。它的值由
printf 的最后部分指出,在此是第二个字段。/ n是回车换行符。
gawk语言支持的其他格式控制符号如下:
c如果是字符串,则显示第一个字符;如果是整数,则将数字以ASCII字符的形式显示。
d显示十进制的整数。
i显示十进制的整数。
e将浮点数以科学记数法的形式显示。
f将数字以浮点的形式显示。
g将数字以科学记数法的形式或浮点的形式显示。数字的绝对值如果大于等于0.0001则以浮点的形式显示,否则以科学记数法的形式显示。
o显示无符号的八进制整数。
s显示一个字符串。
x显示无符号的十六进制整数。1 0至1 5以a至f表示。
X显示无符号的十六进制整数。1 0至1 5以A至F表示。
%它并不是真正的格式控制字符,% %将显示%。
使用这些格式控制字符时,可以在控制字符前给出数字,以表示你将用的几位或几个字符。

换码控制符
/a 警告或响铃字符。
/b 后退一格。
/f 换页。
/n 换行。
/r 回车。
/t Ta b。
/v 垂直的tab。
 类似资料: