AWK命令的用法
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命令的用法的更多相关文章
- awk命令的用法实战
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn8AAADvCAIAAAAM1SXGAAAgAElEQVR4nO2dz8s125XXHx9oTXMHUZ
- sed,grep,awk命令常用法
查看当天nginx访问日志中2016:03:25到2016:05点passport.mingxiao.com域名访问量最多的url,可以查看网站是否被刷. 法一: sed -n '/2016:03:2 ...
- awk命令基本使用方法
awk命令 基本用法 awk '{print $1, $4}' netstat.txt 单引号中大括号的部分就是awk语句 $1至$n表示第几列,$0表示整行 格式化输出的方法 $ awk '{pri ...
- awk 命令使用入门
Linux 下处理和分析文本文件内容,AWK 命令是一个强有力的工具.特别是文件内容是以行和列的形式排版的时候,AWK 就是命令行界的 Excel 啊! 简单的 awk 命令可以直接在命令行中使用,复 ...
- <三剑客> 老大:awk命令用法
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一 个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是lin ...
- awk命令_Linux awk 命令用法详解
本文索引 awk命令格式和选项 awk模式和操作 模式 操作 awk脚本基本结构 awk的工作原理 awk内置变量(预定义变量) 将外部变量值传递给awk awk运算与判断 算术运算符 赋值运算符 逻 ...
- Linux awk命令用法
概述 awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理 awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0 ...
- awk命令速查
awk与sed.grep一样都是为了加工数据流而做成的文本加工过滤器命令.awk会事先把输入的数据根据字段单位进行分割.在没有制定分割单位的情况下,以输入数据中的空格或Tab为分隔符.与sed相比,它 ...
- linux awk命令详解
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
随机推荐
- 100114G
无耻的暴力 #include<iostream> #include<cstdio> using namespace std; int n; int main() { freop ...
- Java-URL类详解
类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针.资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询. URL(String spec) 根据 S ...
- Echarts-画柱状,折线图
导入echarts包 <script src='../scripts/libraries/echarts/echarts-all.js'></script> 堆积图js var ...
- JQuery触发radio或checkbox的change事件
在JQuery中,当给radio或checkbox添加一个change事件时,如果它的值发生变化就会触发change事件;本文将详细介绍如何利用JQuery触发Checkbox的change事件需要了 ...
- RunLoop的深入了解
RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何 ...
- 【unity shaders】:Unity中的Shader及其基本框架
shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...
- 【BZOJ-1692&1640】队列变换 后缀数组 + 贪心
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1153 Solved: 482[Submit][St ...
- bzoj2716: [Violet 3]天使玩偶
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- DIV横排/竖排滚动(white-space/::-webkit-scrollbar的使用技巧以及display: inline-block的选择)支持手势
参考微信的京东客户端http://wqs.jd.com/,实现DIV的横排滚动,且支持手势,并且不会出现滚动跳,效果如下: 但是观察其div结构是没有使用任何JS去实现. 一.实现上DIV的横排 观察 ...
- git命令的使用 【备用】
*下面为对本地仓库进行操作 [将文件提交到本地仓库] git add 文件名 将文件添加到暂存区 git status ...