您的位置:首页 > 其它

粗谈awk

2016-04-22 16:36 127 查看
AWK的功能是什么?与sed和grep很相似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强大的 功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。 它具备了一个完整的语言所应具有的几乎所有精美特性。实际上,awk的确拥有自己的语言:awk程序设计语言,awk的三位创建者已将它正式定义为:样式 扫描和处理语言。(摘自鸟哥)。。。

调用awk的三种方式:

1 命令行方式

awk [-F field-separator] ‘commands’ input-file

其中,commands 是真正的awk命令, 参数-F是可选的, input-files是要处理的文件

参数:

-F 允许awk更改其子段分隔符。

-v $var=v 把v值赋值给var, 如果多个变量要赋值,就多写几个-v

2 shell脚本方式

即将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一般通过键入脚本文件名来调用

类似于shell首行的#!/bin/bash–>#!/bin/awk

3 将所有的awk命令插入一个大肚文件,然后调用

awk -f awk-script-file input-file(s)

-f profile 允许awk调用并执行profigure程序.

Example:

1 last -n 5 && last -n 5 | awk ‘{print $1}’



只显示最近登录的5个用户 ,

awk的工作流程为:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域,0则表示所有域,1表示第一个域,n表示第n个域。默认域分隔符是"空白键"或"[tab]键",所以n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以1表示登录用户,3表示登录用户ip,以此类推。
2 nl /etc/passwd | awk -F ‘:’ ‘{print3表示登录用户ip,以此类推。
2 nl /etc/passwd | awk -F ‘:’ ‘{print 1}’



这种是awk+action的实例

3 nl /etc/passwd | awk -F ‘:’ ‘{print 1"\t"1 "\t" 7}’



4 还可以在行中添加列名shell名 以及添加最后一行

nl /etc/passwd | awk -F ‘:’ ‘BEGIN {print “name,shell”} {print 1"\t"1 "\t"7} END {print “ScySky,/bin/bash”}’





先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域,0则表示所有域,1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。



这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。搜索支持正则表达式,

PS: 未完待续 。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: