UNIT31 awk Program

Awk是文本工具中最难掌握的,它借鉴了C 语言.python 和bash的一些精华部分。awk自解释型编程语言,它支持用户自定义函数和动态正则表达式等先进功能。

awk设计简单,速度表现很好,可结合Shell(w|awk…),它在命令行中使用,但多是作为脚本来使用。很多基于shell的日志分析工具可用它完成。

awk是那种一旦学会了就会成为您战略编码库的主要部分的语言。awk 能够用很短的程序对文档里的资料做修改.比较.提取.打印等处理,如果使用C或Pascal等完成上述的任务会十分不方便而且很花费时间,所写的程序也会很大。

.awk模式扫描语言ed(sed&grep)awkperl

1.shell一样awk也有几种(awk.nawk.gawk兼容nawk)

awk:最初在1977年完成,支持幂 ^,getline,system等;

nawk:(在 20世纪 80 年代中期,new awk)许多系统中旧的awk解释器通常安装为 oawk (old awk) 命令,而 nawk解释器则安装为nawk 命令。Dr. Kernighan仍然在对 nawk 进行维护,与 gawk一样,它也是开放源代码的,并且可以免费获得;

gawk:是 GNU Projectawk解释器的开放源代码实现。尽管早期的 GAWK发行版是旧的 AWK 的替代程序,但不断地对其进行了更新,以包含 NAWK的特性;

目前,大家都比较倾向于使用awkgawk

2.虽然awksed指令的结构相同,但awksed有以下不同

awk非常适合于结构化的文本文件(行.列数据)处理。相对于sed,它可进行复杂的编程处理,并且可以产生复杂的报表输出。

awk缺省情况下使用扩展的正则。

awk中用C函数取代了一两个字符的行编辑器命令集,如print取代了p。

awk倾向于一行当中分成数个字段来处理。

3.为了避免碰到awk错误总结出以下规律

指令必须包括单引号,因为$在shell中有特殊意义的。

因为模式和动作可有可无,确保用{}括起动作语句以便与模式相区别。

{}内的多个指令可用分号分隔,或直接以‘Enter’按键来隔开

用圆括号括起条件语句

printf格式化输出时,务必加上\n,才能进行分行!

字符串一定要保证被双引号括起来(在模式中除外)

逻辑运算的‘等于’请务必使用两个等号‘==’

在awk当中变量可直接使用,不需加上$符号

.awk的三种调用方式

1.awk [options] 'script' var=value file(s) ,有以下两个特例

# awk ‘pattern’ filename

# awk ‘{action}’ filename

2.awk [options] -f scriptfile var=value file(s)

#cat  my_awk( 要特别注意操作顺序和流程 )

/Sally/ {print “**** found  Sally!  ****”}

{print  $1, $2, $3}

#awk  -f  my_awk   employees

3.#!/bin/nawkf执行:myscript.awk filename

.记录和域字段

1.awk 程序数据处理流程

→读入第一行,并将第一行的资料填入$0,$1,$2. . .等变量当中;

→依据“条件类型”的限制,判断是否需要进行后面的“动作”;

→做完所有的动作与条件类型;

→若还有后续的‘行’的数据,则重复上面的3个步骤,直到所有的数据都读完为止。

2.NRNF(缺省的RS\n,缺省的FSBlank)

列出登陆历史用户中的每一行的账号,并且列出目前处理的行数,并且说明,该行有多少字段(注意,内容想要以print或printf打印时,非变量的文字部分,都需要使用双引号括住):

.获得外部变量方法

1.获得普通外部变量

格式:awk ‘{action}’ 变量名=变量值,这样传入变量,可以在action中获得值。 注意:变量名与值放到’{action}’后面。

# test='awk code'

# echo|awk '{print test}' test="$test"

awk code

#  echo | awk  'BEGIN{print test}' test="$test" 在BEGIN的action不能获得

2.BEGIN程序块中变量

格式:awk –v 变量名=变量值 [–v 变量2=值2 …] 'BEGIN{action}’

# test='awk code'

# echo | awk -v test="$test" 'BEGIN{print test}'

awk code

# echo | awk -v test="$test" '{print test}'

awk code

3.获得环境变量

#awk  'BEGIN{for (i in ENVIRON) {print i"="ENVIRON[i];}}'

LANG=en_US.UTF-8

.......

awk内置变量 ENVIRON,就可以直接获得环境变量。它是一个字典数组。环境变量名就是它的键值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值