为什么想到要写一篇关于awk的总结了,是上次老大让我处理linux下的文件,有一个要根据某个字段排序的功能,我真是百思不得其解,准备人工排序,老大见了不禁冷笑,很受伤,故记之,知耻近乎勇。
什么是awk
awk是linux下一个功能非常强大的文件处理工具,简而言之,awk处理linux下文件,如同sql操作关系型数据库一样,当然有些夸张了。awk是一种语言,采用此种语言可以非常高效的文件处理。
awk语言格式
awk语言格式如下:
awk 'awk语言' [输入源1] [输入源2] [输入源3]……
awk命令的关键在于在于awk语句的编写,awk语句由两部分组成:模式+动作。模式用于匹配,动作会被触发,当读入的数据和模式相互匹配的时候。如下是一个简单的awk命令:
awk '$1>0 {print $1,$2,$3}' emp.data
emp.data是数据源,awk按行读入数据源中数据,根据空字符将行划分成若干列,将每一列的值赋给 1、 2、$3…….。如果第一列的值比3大,就将第一列的内容输出。
awk内置变量与函数
awk变量中有很多内置变量与函数,掌握可以让数据处理更加高效。首先,当awk从数据源中读取一行,然后解析成若干列,将每一列的值赋给
1、
2、
3…….,为什么前缀从1开始呢,因为awk将整行的内容赋给了
0。
awk中变量与函数如下所示:
1. NR——记录当前读取的是第几行
2. sort——根据输出的第一列对输出结果进行排序,这个功能比较重要。
3. NF——输入行中单词的数量
4. length——单词中字符个数
awk类似于C语言,支持各种流程控制命令,包括if else,while,for等。
#if
{ if (n > 0)
print n, "employees, total pay is", pay,
"average pay is", pay/n
else
print "no employees are paid more than $6/hour"
}
# while
{ i = 1
while (i <= $3) {
printf("\t%.2f\n", $1 * (1 + $2) ^ i)
i = i + 1
}
}
#for
{ for (i = 1; i <= $3; i = i + 1)
printf("\t%.2f\n", $1 * (1 + $2) ^ i)
}