awk实战1-基础语法说明

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包替换

1 awk说明

AWK是一种优良的文本处理工具,LinuxUnix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯彼得·温伯格布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。

以上内容引自google翻译,当然我觉得有更好的一段原话,更值得我们记住!

AWK是一种处理文本文件的语言。它将文件作为记录序列处理。在一般情况下,文件内容的每行都是一个记录。每行内容都会被分割成一系列的域,因此,我们可以认为一行的第一个词为第一个域,第二个词为第二个,以此类推。AWK程序是由一些处理特定模式的语句块构成的。AWK一次可以读取一个输入行。对每个输入行,AWK解释器会判断它是否符合程序中出现的各个模式,并执行符合的模式所对应的动作。

——阿尔佛雷德·艾侯,The A-Z of Programming Languages: AWK

2 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是一种处理文本文件的语言,也是一个强大的文本分析工具,如下所示是一些常见的操作选项:

  • [-F option] - 指定输入分隔符,可以是字符串或者正则表达式
  • [-v var=value] - 赋值一个用户定义变量,将外部变量传给awk
  • [-f program-file] - awk 允许将一段awk 程序写入一个文本文件,然后在awk 命令行中用-f 选项调用并执行这段程序。
  • [-W option]

AWK程序是由一系列模式–动作对组成的,写做

pattern { action }
  • pattern : AWK在数据中查找的内容

  • action :找到匹配内容时所执行的一系列命令

  • 输入行被分成了一些记录:记录默认由换行符分割,因此输入会按照行进行分割。程序使用给定的条件一个个的测试每条记录,并执行测试通过的条件所对应的action

    • patternaction都可以省略不写, 但是不能同时不存在!!!
    • pattern默认匹配全部的记录;
    • 而无action则是打印原始记录。

    简单的AWK表达式之外,pattern可以是BEGINEND;这两种条件对应的action分别是读取所有的记录之前和之后。同时,如pattern1, pattern2的条件表示符合条件pattern1pattern2的记录及其之间的部分。

3 AWK内建变量

AWK的内建变量包括域变量,例如$1, $2, $3,以及$0。这些变量给出了记录中域的内容。 内建变量也包括一些其他变量:

  • NR:已输入记录的条数。
  • NF:当前记录中域的个数。记录中最后一个域可以以$NF的方式引用。
  • FILENAME:当前输入文件的文件名。
  • FS:“域分隔符”,用于将输入记录分割成域。其默认值为“空白字符”,即空格和制表符。FS可以替换为其它字符,从而改变域分隔符。
  • RS:当前的“记录分隔符”。默认状态下,输入的每行都被作为一个记录,因此默认记录分隔符是换行符
  • OFS:“输出域分隔符”,即分隔print命令的参数的符号。其默认值为空格。
  • ORS:“输出记录分隔符”,即每个print命令之间的符号。其默认值为换行符。
  • OFMT:“输出数字格式”(Format for numeric output),其默认值为"%.6g"。
$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)。

4 AWK变量和语法

变量名可以是语言关键字外的,只包含大小写拉丁字母,数字和下划线(“_”)的任意字。而操作符“+ - * /”则分别代表加,减,乘,除。简单的将两个变量(或字符串常量)放在一起,则会将二者串接为一个字符串。若二者间至少有一个是常量,则中间可以不加空格;但若二者均为变量,中间必须包括空格。字符串常量是以双引号(“"”)分隔的。语句无需以分号结尾。另外,注释是以“#”开头的。

5 AWK函数

函数是以与C语言类似的方式定义的,以关键字function开头,后面跟函数名称,参数列表和函数体。

# 示例函数
function add_three (number) {
  return number + 3
}

上面的函数可以如此调用:

print add_three(36)     # 输出39

6 AWK运算与判断

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);}'

7 实例演示

7.1 用例一:简单演示awk实用:

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!!!

7.2 用例二:使用awk实现 wc功能

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:~/$ 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值