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

2.awk常用的作用格式:
awk “样式” 文件: 把符合样式的数据行显示出来。
awk { 操作 } 文件: 对每一行都执行{}中的操作。
awk " 样式 { 操作 }" 文件: 对符合样式的数据行,执行{}中的操作.

3.用例:
awk的用法1:

awk `/La/` dataf3       #显示含La的行。

awk的用法2:

awk -F ":" '{print $1,$2}' /etc/passwd  #以“:”为分割,显示/etc/passwd每一行的第1和第2个字段。$1代表第1个字段,$2代表第2个字段,其他类推.

awk的用法3:

awk '/La/{ print $1,$2 }' dataf3  #将含有La关键字的数据行的第1及第2个字段显示出来.默认使用空格分割.

awk的用法4:

awk -F : '/^www/{print $3,$4}' /etc/passwd  # 使用选项 -F,指定:为分隔符,账号www的uid(第3个字段)及gid(第4个字段)显示出来.

awk的用法5:

[root@localhost~]# awk -F : '/^r/{print $1}' /etc/passwd		#显示以r开头的行的第一个字段
root
rpc
rpcuser

awk的用法6:

[root@localhost~]# awk -F : '$3>=500{print $1,$3}' /etc/passwd	#找出$3这个字段的id大于等于500的行,并显示1、3列
www 500
cacti 501
nagios 502
vsftpd 503

awk的用法7:

[root@localhost~]# awk -F : '$7~"bash"{print $1,$7}' /etc/passwd 		#匹配出$7是bash的行,如果为真则打印出来
root /bin/bash
mysql /bin/bash
www /bin/bash
cacti /bin/bash
nagios /bin/bash

awk的用法8:

[root@localhost~]# awk -F : '$7!~"bash"{print $1,$7}' /etc/passwd		#取出$7不是bash的行并打印出来
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown

awk扩展:

实例操作:
[root@localhost]# more awk.txt

07.46.199.184 [28/Sep/2010:04:08:20] "GET /robots.txt HTTP/1.1" 200 0 "msnbot"123.125.71.19 [28/Sep/2010:04:20:11] "GET /
HTTP/1.1" 304 - "Baiduspider

NF的用法:

1. $NF 来打印最后一个字段:

[root@localhost]# awk '{print $NF}' awk.txt
/
"Baiduspider

2. $(NF-2):表示从右向左打印每行第二个字段.  

[root@localhost]# awk '{print $(NF-2)}' awk.txt
[28/Sep/2010:04:20:11]
304

BEGIN{}区域指示用法:

1.OFS的作用是存储输出字段的分隔符

[root@localhost~]# awk -F : 'BEGIN{OFS="+++"}/^www/{ print $1 , $2 , $3 , $4 ,$5 }' /etc/passwd
www+++x+++500+++500+++ # 以 ":" 为分隔符,+++为输出字段分隔符,将账号www用户的第1-5栏显示出来.
本例中,BEGIN{}区域指示awk一开始先做初始化的操作,即设定OFS="+++".变量OFS的作用是存储输出字段的分隔符.接着,寻找www的账户行找到后,使用print印出第1至第5个字段,且彼此使用+++隔开.

2.FS也就是字段分隔符的用法:指定输入分隔符---读取文本时,所使用的字段分隔符.

[root@localhost]# awk '{print $2}' awk.txt | awk 'BEGIN{FS=":"}''{print $1}'
[28/Sep/2010

3.RS表示记录分割符--输入文本信息所使用的换行符

从tomcat日志catalina.out中截取2014-10-13日,在07:00-15:00时间段的日志记录,并保存.

awk 'BEGIN{RS="2014-10-13"}$1>"07:00:00"&&$1<"15:50:00"{print RS,$0}' catalina.out > catalins_link.log
FS表示操作的时候以什么为分割符
RS表示记录分割符(Record Separator)
即RS表示的是awk操作最小单位的边界,而FS是这个最小单位中分割的符号

NR :表示打印当前正在处理的输入的行号

awk '{print NR ") " $1 " -> " $(NF-2)}' awk.txt
其中:
print NR :表示打印当前正在处理的输入的行号
“ )”:表示以半括号将行号括起来.也可以换成任意的符号,如 ]、#、@、等 $1: 表示打印出第一列的数据. $(NF-2): 表示从后向前打印出倒数两列数据. 输出: 1) 07.46.199.184 -> 2002) 123.125.71.19 -> 304

常用操作:

取得系统内存大小:

cat /proc/meminfo | awk '/MemTotal/{ print $2 }'

从catalina.out中截取2014-10-13日,在07:00-15:00时间段的日志记录,并保存.

awk 'BEGIN{RS="2014-10-13"}$1>"07:00:00"&&$1<"15:50:00"{print RS,$0}' catalina.out > 11106.log

过滤出nginx日志中状态码不是200的请求.

cat access.log |awk '$10!="200"{print $10}'

awk '$9 !~ /200/ {print $0}' access.log 

统计访问时间大于5mm的URL,并进行排序

awk '$NF>5 {print $0}' access_mmall.log|awk '{print $12}'|awk -F? '{print $1}'|sort|uniq -c|sort -rbg

用awk来实现奇数行和偶数行的输出,思路很简单,就是判断NR变量。NR是行号,行号是2的倍数,自然是偶数行。 

要处理的文件内容如下所示:

$ cat .txt
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec

输出奇数行:

不加{print}语句也能默认输出整行,例如

$ awk NR% .txt
Jan
Mar
May
Jul
Sep
Nov

如果还不懂看这个你就懂了,用NR对2取模,当余数为1时,awk的执行模式判断为真,就会执行默认的{print}输出奇数行,当余数不为1时,判断为假,不执行输出,所以偶数行就不会输出。

$ awk '{if(NR%2==1)print $0}' .txt
Jan
Mar
May
Jul
Sep
Nov

输出偶数行

$ awk NR%== .txt
Feb
Apr
Jun
Aug
Oct
Dec

或者用如下方法取反,也可以去除偶数行.

$ awk '!(NR%2)' .txt
Feb
Apr
Jun
Aug
Oct
Dec

 

文本处理三剑客之AWK的用法的更多相关文章

  1. 文本处理三剑客之awk

    简介 awk是一种处理文本文件的语言,是一个强大的文本编辑工具.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分在进行各种分析处理. gawk 用法:gawk [optio ...

  2. 文本处理三剑客之 awk

    GAWK:报告生成器,格式化文本输出 awk [options] ‘program’ var=value file… awk [options] -f programfile var=value fi ...

  3. 文本处理三剑客之awk(No.1)

    示例1:只查看test.txt文件内的第3到第7行的内容 awk '{if(NR>=3 && NR<=7) print $0}' test.txt #其中的$0是输出整个行 ...

  4. shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)

    文本处理三剑客:1.grep  2.sed  3.awk 一.grep:(过滤) grep的使用,主要的参数有: -n  :显示行号:-o  :只显示匹配的内容-q  :静默模式,没有任何输出,得用e ...

  5. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  6. shell编程系列17--文本处理三剑客之awk动作中的表达式用法

    shell编程系列17--文本处理三剑客之awk动作中的表达式用法 awk动作表达式中的算数运算符 awk动作中的表达式用法总结: 运算符 含义 + 加 - 减 * 乘 / 除 % 模 ^或** 乘方 ...

  7. <三剑客> 老大:awk命令用法

    awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一 个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是lin ...

  8. Linux实战教学笔记18:linux三剑客之awk精讲

    Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...

  9. 文本处理三剑客之 Sed ——一般编辑命令

    sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称 ...

随机推荐

  1. Spring Cloud Netflix概览和架构设计

    Spring Cloud简介 Spring Cloud是基于Spring Boot的一整套实现微服务的框架.他提供了微服务开发所需的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策 ...

  2. C++ 链接Mysql 函数介绍

    通过MySQL自己的API函数进行连接 1.使用API的方式连接,需要加载mysql的头文件和lib文件.在VS2010的附加包含目录中添加\MySQL\MySQL Server 5.1\includ ...

  3. Latch: Row Cache Objects (One bug?)

    During the performance test, observe the following condition in the database server from EM, And the ...

  4. 百度Android在线语音识别SDK用法

    百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的用法. 在线SDK是以JAR包和动态链接库形式公布和使用,能够从百度开放云平台站点中下载SDK及使用说明文档. title=d ...

  5. Solr学习之四-Solr配置说明之二

    上一篇的配置说明主要是说明solrconfig.xml配置中的查询部分配置,在solr的功能中另外一个重要的功能是建索引,这是提供快速查询的核心. 按照Solr学习之一所述关于搜索引擎的原理中说明了建 ...

  6. FileZilla server windows 2003系统下适用的版本

    最新版的FileZilla server 在windows 2003系统下已经不能用了 http://files.cnblogs.com/files/airoot/FileZilla_Server-0 ...

  7. Android开发日记(三)

    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...

  8. hdu3374(最小最大表示法以及kmp)

    题意:输出一个环形字符串的最小字典序的首位置,以及最大字典序的首位置,以及这个字符串的原字符串的循环节....... #include<iostream> #include<stdi ...

  9. jfinal视频目录

    目录-----------------------------------------------------------第一章 简介第二章 JFine2.0 maven demo第三章番外篇 JFi ...

  10. ajax的datatype选项的值

    jquery ajax方法 1."xml":返回 XML 文档,可用 jQuery 处理. 2."html"::返回纯文本 HTML 信息:包含的 script ...