销售型网站设计,怎么做网站广告位,好看的图案设计,电子贺卡制作模板一、简介
awk是一种编程语言#xff0c;用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件#xff0c;或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能#xff0c;是linux/unix下的一个强大编程工具。它在命令行中使用用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能是linux/unix下的一个强大编程工具。它在命令行中使用但更多是作为脚本来使用。
awk的处理文本和数据的方式它逐行扫描文件从第一行到最后一行寻找匹配的特定模式的行并在这些行上进行你想要的操作。如果没有指定处理动作则把匹配的行显示到标准输出(屏幕)如果没有指定模式则所有被操作所指定的行都被处理。
awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人分别是Alfred Aho、Brian Kernighan、Peter Weinberger。
gawk是awk的GNU版本它提供了Bell实验室和GNU的一些扩展。下面介绍的awk是以GUN的gawk为例的在linux系统中已把awk链接到gawk所以下面全部以awk进行介绍。
二、使用
awk [-F field-separator] commands input-file(s) 其中[-F域分隔符]是可选的commands 是真正awk命令。 input-file(s) 是待处理的文件。 在awk中文件的每一行中由域分隔符分开的每一项称为一个域。通常在不指名-F域分隔符的情况下默认的域分隔符是空格。
三、模式
正则表达式使用通配符的扩展集。关系表达式可以用下面运算符表中的关系运算符进行操作可以是字符串或数字的比较如$2%1选择第二个字段比第一个字段长的行。模式匹配表达式用运算符(匹配)和!(不匹配)。模式模式指定一个行的范围。该语法不能包括BEGIN和END模式。BEGIN让用户指定在第一条输入记录被处理之前所发生的动作通常可在这里设置全局变量。END让用户在最后一条输入记录被读取之后发生的动作。
四、常量
常量名含义$n当前记录的第n个字段字段间由FS分隔$0完整的输入记录NF浏览记录的域的个数NR已读的记录数ARGC命令行参数个数ARGV命令行参数排列ENVIRON支持队列中系统环境变量的使用FILENAMEawk浏览的文件名FNR浏览文件的记录数FS设置输入域分隔符等价于命令行 -F选项OFS输出域分隔符ORS输出记录分隔符RS控制记录分隔符
五、常用函数
1. 求和
cat data | awk {sum$1} END {print Sum , sum}2. 求平均
cat data | awk {sum$1} END {print Average , sum/NR}3. 求最大值
cat data | awk BEGIN {max 0} {if ($1max) max$1 fi} END {print Max, max}4. 求最小值min的初始值设置一个超大数即可
cat data | awk BEGIN {min 1999999} {if ($1min) min$1 fi} END {print Min, min}5. 去重
awk -F: !a[$1]6. 输入统计结果
cat data | awk info[$0]a[$12] {} END {print TotalCount , NR; for(i in info){print i, info[i]} }还可以结合 grep/uniq(去重)/sort(排序)等命令一起使用