awk一个神奇而又强大的功能,绝对是一个开发利器,效率之选!希望这里的一些总结能帮到那些存在困惑的人!
awk实战1-基础语法说明
awk实战2-流程控制语句总结
awk实战3-awk数组技巧
awk实战4-函数系列-算数函数说明
awk实战5-函数系列-基本字符串函数
awk实战6-函数系列-字符串函数说明-asort和sub
awk实战7-函数系列-时间函数
awk实战8-函数系列-字节操作
awk实战9-IO函数-getline和close
awk实战10-IO函数-其他介绍
awk实战11-进阶-10种awk有效应用实战
awk实战12-进阶-再谈awk匹配模式
awk处理小问题-解决局部jar包替换
AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。
以上内容引自google翻译,当然我觉得有更好的一段原话,更值得我们记住!
AWK是一种处理文本文件的语言。它将文件作为记录序列处理。在一般情况下,文件内容的每行都是一个记录。每行内容都会被分割成一系列的域,因此,我们可以认为一行的第一个词为第一个域,第二个词为第二个,以此类推。AWK程序是由一些处理特定模式的语句块构成的。AWK一次可以读取一个输入行。对每个输入行,AWK解释器会判断它是否符合程序中出现的各个模式,并执行符合的模式所对应的动作。
——阿尔佛雷德·艾侯,The A-Z of Programming Languages: AWK
#### mawk - pattern scanning and text processing language
#### awk 表达式扫描和文本处理语言;
mawk [-W option] [-F value] [-v var=value] [--] 'program text' [file
...]
mawk [-W option] [-F value] [-v var=value] [-f program-file] [--] [file
...]
awk是一种处理文本文件的语言,也是一个强大的文本分析工具,如下所示是一些常见的操作选项:
AWK程序是由一系列模式–动作对组成的,写做
pattern { action }
pattern
: AWK在数据中查找的内容
action
:找到匹配内容时所执行的一系列命令
输入行被分成了一些记录:记录默认由换行符分割,因此输入会按照行进行分割。程序使用给定的条件一个个的测试每条记录,并执行测试通过的条件所对应的action
。
pattern
和action
都可以省略不写, 但是不能同时不存在
!!!pattern
默认匹配全部的记录;action
则是打印原始记录。简单的AWK表达式之外,
pattern
可以是BEGIN
或END
;这两种条件对应的action
分别是读取所有的记录之前和之后。同时,如pattern1, pattern2
的条件表示符合条件pattern1
和pattern2
的记录及其之间的部分。
AWK的内建变量包括域变量,例如$1, $2, $3,以及$0。这些变量给出了记录中域的内容。 内建变量也包括一些其他变量:
$NF
的方式引用。print
命令的参数的符号。其默认值为空格。print
命令之间的符号。其默认值为换行符。$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 这个变量包含执行过程中当前行的文本内容。
[N] ARGC 命令行参数的数目。
[G] ARGIND 命令行中当前文件的位置(从0开始算)。
[N] ARGV 包含命令行参数的数组。
[G] CONVFMT 数字转换格式(默认值为%.6g)。
[P] ENVIRON 环境变量关联数组。
[N] ERRNO 最后一个系统错误的描述。
[G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。
[A] FILENAME 当前输入文件的名。
[P] FNR 同NR,但相对于当前文件。
[A] FS 字段分隔符(默认是任何空格)。
[G] IGNORECASE 如果为真,则进行忽略大小写的匹配。
[A] NF 表示字段数,在执行过程中对应于当前的字段数。
[A] NR 表示记录数,在执行过程中对应于当前的行号。
[A] OFMT 数字的输出格式(默认值是%.6g)。
[A] OFS 输出字段分隔符(默认值是一个空格)。
[A] ORS 输出记录分隔符(默认值是一个换行符)。
[A] RS 记录分隔符(默认是一个换行符)。
[N] RSTART 由match函数所匹配的字符串的第一个位置。
[N] RLENGTH 由match函数所匹配的字符串的长度。
[N] SUBSEP 数组下标分隔符(默认值是34)。
变量名可以是语言关键字外的,只包含大小写拉丁字母,数字和下划线(“_”)的任意字。而操作符“+ - * /”则分别代表加,减,乘,除。简单的将两个变量(或字符串常量)放在一起,则会将二者串接为一个字符串。若二者间至少有一个是常量,则中间可以不加空格;但若二者均为变量,中间必须包括空格。字符串常量是以双引号(“"”)分隔的。语句无需以分号结尾。另外,注释是以“#”开头的。
函数是以与C语言类似的方式定义的,以关键字function
开头,后面跟函数名称,参数列表和函数体。
# 示例函数
function add_three (number) {
return number + 3
}
上面的函数可以如此调用:
print add_three(36) # 输出39
awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。
如下所示为awk支持的一些逻辑运算符,以及他们的优先级别排序。
#### 01 三目运算符
awk 'BEGIN{a="b";print a=="b"?"ok":"err";}'
ok
#### 02 数组演示
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'
cat test | awk 'BEGIN {print "SUM:"} {print $1} END {print "END SUM!!!"}'
user@user:-RUN/02-test$ cat test | awk 'BEGIN {print "SUM:"} {print $1} END {print "END SUM!!!"}'
SUM:
112
121
33445
END SUM!!!
cat test | awk 'BEGIN {print "SUM:"} {w += NF; c += length + 1} END {print "END SUM:", NR, w, c}'
user@user:~/$ cat test | awk 'BEGIN {print "SUM:"} {w += NF; c += length + 1} END {print "END SUM:", NR, w, c}'
SUM:
END SUM: 3 11 46
user@user:~/$