awk使用示例分析
导读:本文共5670字符,通常情况下阅读需要19分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: awk是一个强大的文本分析工具。awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 awk 的确拥有自己的语言: awk 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行... ...
目录
(为您整理了一些要点),点击可以直达。awk是一个强大的文本分析工具。
awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 awk 的确拥有自己的语言: awk 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
-F 指定分隔符,而不以默认的空白(空格符或者制表符)
-v 指定变量
-f 指定脚本的文件名,即将脚本放入一个文件当中,避免 awk 书写太长,影响视觉,和重复编写
BEGIN 关键字会执行一次指定的脚本段
END 关键字定义的脚本段,在所有操作完成之后
处理数据的脚本段在第二个程序中定义
++ -- 增加与减少(前置或后置)
^ ** 指数(右结合性)
! + - 非、一元加号、一元减号
* / % 乘、除、余数
+ - 加、减
< <= == != > >= 比较
&& 逻辑AND( 简写)
|| 逻辑OR( 简写)
?: 三元条件式
= += -= *= /= %= ^= **= 赋值( 右结合性)
$ 后面跟数字,表示获取指定列的域,0 代表取整条记录
ARGC 命令行参数个数
ARGV 命令行参数构成胡数组
FILENAME 当前输入文件的文件名
FS 设置输入域分隔符,等价于命令行 -F选项
OFS 输出域分隔符
RS 控制记录分隔符
ORS 输出记录分隔符
NF 浏览记录的域的个数
NR 已读的记录数
FNR 与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计
IGNORECASE 是否忽略大小写
记录 默认指的是每行,因为记录分隔符(RS)是换行符
域 默认指的是每个单词,因为域分隔符(FS)是空格
awk 通过内建变量 ARGC ( 参数计数 ) 与 ARGV ( 参数向量,或参数值 ) ,让命令行参数可用。
cat showargs.awk BEGIN { print "ARGC= ", for 0; k<ARGC; k++)
数组
正则表达式元字符
^ 行首定位符
$ 行尾定位符
. 匹配除换行之外的单个字符
\* 匹配0个或者多个前导字符(这里是前导字符0或者多个,任意一个或多个字符,使用 .* )
+ 匹配一个或者多个前导字符
? 匹配0个或者1个前导字符
[] 指定字符中的任意一个字符,比如[Ll] [a-z]
[^] 上面一样,不匹配的字符
AA|BB 匹配AA或者BB
(AB)+ 匹配一个或者多个AB组合,比如AB,ABAB,ABABAB...
\* 匹配*本身
& 保存查找匹配到的串,可以用在后面的替换中 s/love/**&**/
内置函数
sub(/reg/,替换串[,目标串])
gsub(/reg/,替换串[,目标串])
index(str,sub_str) 返回sub_str第一次在str中出现的位置(偏移量从1开始)
length(str) 返回字符串的字符个数
substr(str,start_pos[,length]) 返回子串,如果没有length,就到串的末尾
match(str,/reg/) 返回正则匹配在字符串中的位置,同时设置RSTART和RLENGTH的值
split(str,arr_name[,split_sig])
atan2(x,y)
cos(x)
exp(x)
log(x)
sin(x)
sqrt(x)
int(x)直接舍去小数,保留整数部分
rand() 产生随机数(0~1) srand(x) 初始化随机数种子
默认情况下每次调用rand(),结果都会产生相同的随机数,这时候需要调用srand()重新产生一个种子,后面的随机数才不同
条件语句和循环
系统交互
如果处理逻辑复杂,就将代码写进文件里,再通过 -f 引用;这样可防止敲错代码。
灵活调用系统命令,内置变量,使代码更简洁。
处理大文件时,多审核优化逻辑代码,可有效提高执行效率。
awk使用示例分析的详细内容,希望对您有所帮助,信息来源于网络。