先在此至敬朱双印老师,博客写得很详细:http://www.zsythink.net/archives/tag/awk/ 这是朱双印老师关于awk博客的链接,强力推荐给大家
 
AWK一般在网上说是一种处理文本文件的语言,也是一个强大的文本分析工具。
虽然我也认同这种说法,但是在此我的认知是:
awk是逐行处理文本文件的语言/分析工具

 
 
从上面朱老师的图中可以看到,$0表示整行,其它的就是以分隔符进行划分的了
变量名称
代表意义
NF
每一行 ($0) 拥有的栏位总数
NR
目前 awk 所处理的是『第几行』数据
FS
目前的分隔字节,默认是空白键
 
命令参数格式
#awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
-F 指定输入分隔符【此处其实是可以使用多个分隔符进行分隔的,例:< awk -F '[-|]' '{print $3}' FileName>】
#cat /usr/local/mail/app/log/authenticator.log|grep 'none'|awk -F '[<>{}]' '{print $2,$4}'
-v 【options】的一种,用于设置变量的值
-v OFS="+++" 【使用变量要配合-v选项】OFS可以设定awk的输出分隔符
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名 【显示当前处理的文件名】
FNR 浏览文件的记录数【如同时处理多个文件,会分别计算行数】
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
ORS 输出记录分隔符【真正的输出行分隔符】
RS 控制记录分隔符 【默认是以换行作为行分隔,比如需要定义空格作为行分隔】
 
#BEGIN表示在开始逐行处理文件之前指定的动作
#END表示在结束逐行处理文件之后指定的动作
例:
#awk 'BEGIN{print "aaaa","bbbb"} {print $1,$2} END{print "cccc","dddd"}' test
 
分隔符: -F 进行定义
#awk -F# '{print $1,$2}' test
#awk -F “#” '{print $1,$2}' test
#awk -v FS='#' '{print $1,$2}' test
 
awk支持的关系运算符
关系运算符 含义 用法示例
< 小于 x<y
<= 小于等于 x<=y
== 等于 x==y
!= 不等于 x!=y
>= 大于等于 x>=y
> 大于 x>y
~ 与对应 与此同时匹配则为真 x ~ /正则/
!~ 与对应的正则不匹配则为真 x !~ /正则/
 
awk 模式
1、空模式
2、关系运算模式
3、BEGIN/END模式
4、正则模式
5、行范围模式
 
awk正则格式
awk使用的正则用法属于“扩展正则表达式”,当使用{x,y}这咎次数匹配的正则表达式时,需要配合--posix选项或者--re-interval选项
#awk '/正则表达式/{}' filename
例:
#awk -F ":" 'BEGIN{printf "%-10s%-10s\n","用户名","用户ID"} /^zsy/{printf "%-10s\t%-10s\n",$1,$3}' /etc/passwd
#awk '/\/bin\/bash$/{print $0}' /etc/passwd 《注意转义字符》
#awk --posix '/he{2,3}y/{print $0}' test3 《注意需要使用--posix》
#awk --re-interval '/he{2,3}y/{print $0}' test3 《或者使用--re-interval》
 
awk行范围模式
例:搜索某两个内容之间出现的行
#awk '/正则1/,/正则2/{动作}' /some/file
#awk 'NR>=3 && NR<=6 {print $0}' filename
 
例:awk提取IP地址的一个示例
#awk --posix '$2~/192\.168\.[0-9]{1,3}\.[0-9]\.{1,3}/{print $1,$2}' filename
awk中使用IF
#awk -F ":" '{if($3<500){print $1,"系统用户"} else{print $1,"普通用户"} }' /etc/passwd
#awk 'BEGIN{ for(i=0;i<6;i++){if(i=3){continue}; print i}}'
 
NEXT可以促使AWK不对当前行执行对应的动作,而直接处理下一行
#awk '{ if(NR==2){ next }; print $0}' test9
 
AWK数组
#awk 'BEGIN{ a[1]="a1";a[2]="a2"; for(i=1;i<=2;i++){print i,a[i]} }'
#awk 'BEGIN{ a[1]="a1";a[2]="a2"; for(i in a){print i,a[i]} }'
统计某个IP出现的次数
#awk '{ count[$i]++} END{ for(i in count){print i,count[i]} }' test10
算数函数
rand函数、srand函数、int函数
rand函数生成随机数,但是是固定的,需要结合srand
随机一个数
#awk 'BEGIN{print rand()}'
#awk 'BEGIN{srand(); print rand()}'
随机一个数,并且乘以100
#awk 'BEGIN{srand(); print 100*rand()}'
生成一个随机数,乘以100,并且截取整数部分
#awk 'BEGIN{srand(); print int(100*rand())}'
 
字符串函数
gsub
例:将第一列中的小写字母“l"都替换成大写字母”L",【$1表示第一列,如果删除$1,则表示所有的均替换】
#awk '{gsub("l","L",$1);print $0}' test11
#awk '{gsub("[a-z]","6",$1);print $0}' test11
sub 表示替换指定范围内第一次匹配到的符合条件的字符,使用方法与gsub一样,不举例
length 获取指定字符串的长度,如果不传入任何字符,则以$0作为参数
#awk '{for(i=1;i<=NF;i++){print $i,length($i)}}' test11
index获取指定字符串位于整个字符串中的位置,示例:<如果不存在则返回0>
#awk '{print index($0,"Lee")}' test11
split 将指定的字符串按照指定的分割符切割,将切割后的每一段赋值到数组的元素中,从而动态创建数组,示例如下:
并且split函数的返回值的内容是数组的长度:
split分割后的数组的下标是从1开始
#awk -v ts="大娃;二娃;三娃" ' BEGIN{split(ts,huluwa,";"); for(i in huluwa){print huluwa[i]} } '
#awk -v ts="大娃;二娃;三娃" 'BEGIN{ print split(ts,huluwa,";" )}'
#awk -v ts="qq te ab th" 'BEGIN{ arrlen=split(ts,arr," "); for(i=1;i<=arrlen;i++){print i,arr[i]} }'
asort根据元素的值进行排序
#awk 'BEGIN{ t["a"]=66;t["b"]=3; asort(t); for(i in t){print i,t[i]}}'
#awk 'BEGIN{ t["a"]=66;t["b"]=3; asort(t); for(i in t){print i,t[i]} }'
#awk 'BEGIN{ t["a"]=66;t["b"]=3; asort(t,newt); for(i in newt){print i,newt[i]} }'
 
三元运算
普通示例:获取UID小于500的用户,进行判断是否是普通用户
#awk -F ":" '{if($3<500){usertype="系统用户"}else{usertype="普通用户"};print $1,usertype}' /etc/passwd
三元运算的写法
#awk -F ":" '{usertype=$3<500?"系统用户":"普通用户";print $1,usertype}' /etc/passwd
#awk -F ":" '{$3<500?a++:b++} END{print a,b}' /etc/passwd
 
打印奇偶行<i初始值为0,再利用!进行取反>
打印奇数行
#awk 'i=!i' test2
打印偶数行
#awk '!(i=!i)' test2

awk命令小结的更多相关文章

  1. Linux awk命令使用方法

    awk是linux上非常好用的文本处理工具,常用于指定列的处理,包括获取指定列的内容.根据指定列匹配关系输出等文本处理.本文主要描述awk命令的基本语法.正则表达式与操作符的使用.常用内置变量的含义和 ...

  2. 【三剑客】awk命令

    前言 awk是一种很棒的语言,它适合文本处理和报表生成. 模式扫描和处理.处理文本流. awk不仅仅是Linux系统中的一个命令,而是一种编程语言,可以用来处理数据和生成报告. 处理的数据: 可以是一 ...

  3. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  4. awk命令详解

    搜索 纠正错误  添加实例 awk 文本和数据进行处理的编程语言 补充说明 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件 ...

  5. Linux安全基础:awk命令的使用

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  6. AWK命令学习

    使用方法 awk 'pattern {action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到 ...

  7. awk 命令

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  8. AWK命令的用法

    1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...

  9. [Linux] linux awk命令详解

    reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...

随机推荐

  1. eclipse使用报错集锦

    问题1.Eclipse启动时总是提示“subversive connector discovery”解决方案 解答1:在eclipse_workSpace(工作空间下)\.metadata\.plug ...

  2. Python爬虫与数据分析之爬虫技能:urlib库、xpath选择器、正则表达式

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  3. 开窗函数over

    select   id,sum(je) over() as je from dt

  4. asp.net 微信开发(一)

    在准备工作中,我们已经完成准备工作,接下来就是进行开发啦,应该怎么来开发呢??容我想想...我觉得我们可以直接让用户的消息发送到微信的消息,转到我们自己的服务器上面!!感觉好厉害的样子 1.首先写 验 ...

  5. 性能测试进阶指南——基础篇之磁盘IO

    本文旨在帮助测试人员对性能测试常用指标做一个简单的讲解,主要包括CPU.内存.磁盘和网络带宽等系统资源,本文仅仅局限于Linux系统,Windows Server系统暂不做考虑. 使用iostat分析 ...

  6. JEECG 集成KiSSO单点登录实现统一身份认证

    JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...

  7. Entity Framework 支持 DataTable

    转载:http://www.cnblogs.com/wlflovenet/archive/2011/12/30/EF11.html https://www.cnblogs.com/hanjun0612 ...

  8. 关于background-size 的一点小坑

    目前在做一个网页,要求使用一个图片作为背景,必须要全屏目填充,于是我想,这不是很简单的事情么: 有两种实现方法:首先设置添加一个div(或者body),把div(或者body)元素的宽和高都设置成10 ...

  9. urllib、urllib2、urllib3区别和使用

    python3中把urllib和urllib合并为一个库了,urllib对应urllib.request 1.) python 中最早内置拥有的网络请求模块就是 urllib,我们可以看一下 urll ...

  10. ReactiveX 学习笔记(28)使用 RxJS + React.js 进行 GUI 编程

    课题 程序界面由3个文本编辑框和1个文本标签组成. 要求文本标签实时显示3个文本编辑框所输入的数字之和. 文本编辑框输入的不是合法数字时,将其值视为0. 3个文本编辑框的初值分别为1,2,3. 创建工 ...