gawk(awk)的用法案例
gawk(awk)的用法案例
本文首先简单介绍一个gawk和awk的区别,然后是一点基本使用流程,最后是自己做的一个分析数据文件的脚本代码,供大家参考。另外想了解基本流程的入门知识的可以下载附件pdf格式的awk入门手册。
祝我们进步。
GAWK和AWK:
AWK 是该编程语言本身的名称,它编写于 1977 年。其名称是三个主要作者的姓的首字母缩写:Drs. A. Aho、P. Weinberger 和 B. Kernighan。
因为AWK 是一种文本处理和模式匹配语言,所以它通常称为数据驱动的 语言,程序语句描述需要进行匹配和处理的输入数据,而不是程序操作步骤的序列,在许多语言中都是这样的。AWK 程序在其输入数据中搜索包含模式的记录、对该记录执行指定的操作,直到程序到达输入的末尾。AWK 程序擅长于处理数据库和表型数据,如从多个数据集中提取一些列、建立报表或分析数据。事实上,AWK 适合于编写短小的、一次性程序,以执行一些灵活的文本处理,而使用其他的语言则可能成本较高。另外,作为一种功能强大的工具,AWK 常常在命令行中使用或与管道一起使用。
与 Perl(它起源于 AWK)一样,AWK是一种解释性语言,所以 AWK 程序通常不需要进行编译。相反,在运行时将程序脚本传递给 AWK 解释器。
AWK 输入语言使用类似 C
语言的语法,这使得系统编程人员感觉到非常的方便。事实上,其中许多特性,包括控制语句和字符串函数,如printf
和 sprintf
,基本上是相同的。然而,也存在着一些差异。
省略pattern时无条件的执行action
AWK 的不同版本
在 20 世纪 80 年代中期,对 AWK 语言进行了更新,并不同程度地使用一种称为 NAWK (New AWK) 的增强版本对其进行了替换。许多系统中仍然存在着旧的 AWK 解释器,但通常将其安装为 oawk (Old AWK) 命令,而 NAWK 解释器则安装为主要的 awk 命令,也可以使用 nawk 命令。Dr. Kernighan 仍然在对 NAWK 进行维护,与 GAWK 一样,它也是开放源代码的,并且可以免费获得(请参见参考资料部分)。
GAWK 是 GNUProject 的 AWK 解释器的开放源代码实现。尽管早期的GAWK 发行版是旧的 AWK 的替代程序,但不断地对其进行了更新,已包含 NAWK 的特性。
一般的,AWK 始终表示引用通用的语言,而 GAWK 或 NAWK 实现所特有的特性则使用它们的名称进行引用。
使用基础:
工作流程:
1. 执行awk时反复进行下列四个步骤:
i. 自动从指定数据文件中读取一个数据行;
ii. 自动更新相关的内建变量值
iii. 依次执行程序中所有的pattern{Action}指令;
iv. 执行完所有的action后如果有未读入的行,则自动重复执行以上步骤。
2. 读入一个数据行时awk使用内建变量¥0予以记录。每当$0被改动时(比如读入新行)awk会立即重新分析$0的字段情况,并将$0上个字段的数据用$1、$2、$3…记录。
该代码主要目的是分析ns2下搭建的mesh网络平台下的仿真数据,获取仿真文件对应的吞吐量的。仿真数据文件参见附件。
begin和end也是一种pattern,begin在开始执行程序,尚未开启任何输入文件前, 被执行一次.(注意: 只被执行一次)
end在输入文件执行完毕后执行一次。
BEGIN{
init=0;
i=0;
recv=0;
send=0;
}
{
action=$1; #the event
time=$2; #the time that event happened
node_nb=$3;
node_nb=substr(node_nb,2,1);
trace_type=$4;
pkt_type=$7;
pkt_size=$8;
if(action=="r"&&trace_type=="MAC"&&(pkt_type=="cbr"||pkt_type=="tcp"))
{
#printf("action=%s ",action);
#printf("time=%f ",time);
#printf("node_nb=%s ",node_nb);
#printf("trace_type=%s ",trace_type);
#printf("pkt_type=%s ",pkt_type);
#printf("pkt_size=%d\n",pkt_size);
pkt_byte_sum[i+1]=pkt_byte_sum[i]+(pkt_size-20);
if(init==0)
{
start_time=time;
init=1;
}
end_time[i]=time;
i=i+1;
recv++;
}
elseif(action=="s"&&trace_type=="MAC"&&(pkt_type=="cbr"||pkt_type=="tcp"))
{
send++;
}
}
END{
printf("i=%d\n",i);
#printf("pkt_byte_sum[i]=%d\n",pkt_byte_sum[i]);
#printf("%.2f\t%.2f\n",end_time[0],0);
for(j=1;j<i;j++)
{#printf("pkt_byte_sum[j]=%d\n",pkt_byte_sum[j]);
th=pkt_byte_sum[j]*8/((end_time[j]-start_time)*1000000);
#printf("%.2f\t%.2f\n",end_time[j],th);
}
#printf("%.2f\t%.2f\n",end_time[i-1],0);
#printf("start_time=%.2f\n",start_time);
#printf("pkt_byte_sum[j]=%d\n",pkt_byte_sum[j]);
printf("send=%drecv=%d\n",send,recv);
printf("throughput=%.2f\n",(recv*8*1000)/(1000000.00*(end_time[i-1]-20)));
}
数据节选:
D 36.238800000 _12_ RTR NRTE 2303 cbr 820 [0 0 0 0]------- [12:242 3:278 31 0] [0] 0 0
s 36.242940900 _10_ AGT --- 2304 cbr 800[0 0 0 0] ------- [10:241 3:292 32 0] [0] 0 0
r 36.242940900 _10_ RTR --- 2304 cbr 800[0 0 0 0] ------- [10:241 3:292 32 0] [0] 0 0
D 36.242940900 _10_ RTR NRTE 2304 cbr 820 [0 0 0 0] ------- [10:241 3:292 31 0][0] 0 0
s 36.243167500 _14_ AGT --- 2305 cbr 800[0 0 0 0] ------- [14:245 9:252 32 0] [0] 0 0
r 36.243167500 _14_ RTR --- 2305 cbr 800[0 0 0 0] ------- [14:245 9:252 32 0] [0] 0 0
D 36.243167500 _14_ RTR NRTE 2305 cbr 820 [0 0 0 0] ------- [14:245 9:252 31 0][0] 0 0
s 36.249101900 _7_ AGT --- 2306 cbr 800[0 0 0 0] ------- [7:268 3:312 32 0] [0] 0 0
r 36.249101900 _7_ RTR --- 2306 cbr 800[0 0 0 0] ------- [7:268 3:312 32 0] [0] 0 0
D 36.249101900 _7_ RTR NRTE 2306 cbr 820 [0 0 0 0] ------- [7:268 3:312 31 0][0] 0 0
s 36.249631800 _15_ AGT --- 2307 cbr 800[0 0 0 0] ------- [15:231 6:226 32 0] [0] 0 0
r 36.249631800 _15_ RTR --- 2307 cbr 800[0 0 0 0] ------- [15:231 6:226 32 0] [0] 0 0
D 36.249631800 _15_ RTR NRTE 2307 cbr 820 [0 0 0 0] ------- [15:231 6:226 31 0][0] 0 0
s 36.250815500 _12_ AGT --- 2308 cbr 800[0 0 0 0] ------- [12:270 9:249 32 0] [0] 0 0
r 36.250815500 _12_ RTR --- 2308 cbr 800[0 0 0 0] ------- [12:270 9:249 32 0] [0] 0 0
D 36.250815500 _12_ RTR NRTE 2308 cbr 820 [0 0 0 0] ------- [12:270 9:249 31 0][0] 0 0
s 36.253488200 _7_ AGT --- 2309 cbr 800[0 0 0 0] ------- [7:271 0:299 32 0] [0] 0 0
r 36.253488200 _7_ RTR --- 2309 cbr 800[0 0 0 0] ------- [7:271 0:299 32 0] [0] 0 0
D 36.253488200 _7_ RTR NRTE 2309 cbr 820 [0 0 0 0] ------- [7:271 0:299 31 0][0] 0 0
s 36.256071300 _14_ AGT --- 2310 cbr 800[0 0 0 0] ------- [14:239 8:244 32 0] [0] 0 0
r 36.256071300 _14_ RTR --- 2310 cbr 800[0 0 0 0] ------- [14:239 8:244 32 0] [0] 0 0
D 36.256071300 _14_ RTR NRTE 2310 cbr 820 [0 0 0 0] ------- [14:239 8:244 31 0][0] 0 0
s 36.256867254 _6_ RTR --- 2311 OLSR 56[0 0 0 0] ------- [6:255 -1:255 32 0] [1 21 [HELLO 6 0 21]]
s 36.257302254 _6_ MAC --- 2311 OLSR 114[0 ffffffff 6 800] ------- [6:255 -1:255 32 0] [1 21 [HELLO 6 0 21]]
r 36.258214508 _2_ MAC --- 2311 OLSR 56[0 ffffffff 6 800] ------- [6:255 -1:255 32 0] [1 21 [HELLO 6 0 21]]
r 36.258239508 _2_ RTR --- 2311 OLSR 56[0 ffffffff 6 800] ------- [6:255 -1:255 32 0] [1 21 [HELLO 6 0 21]]
s 36.258618800 _2_ AGT --- 2312 cbr 800[0 0 0 0] ------- [2:261 0:268 32 0] [0] 0 0
r 36.258618800 _2_ RTR --- 2312 cbr 800[0 0 0 0] ------- [2:261 0:268 32 0] [0] 0 0
D 36.258618800 _2_ RTR NRTE 2312 cbr 820 [0 0 0 0] ------- [2:261 0:268 31 0][0] 0 0
gawk(awk)的用法案例的更多相关文章
- Linux sed 和 awk的用法
sed用法: 原文链接:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具,本身是一个管 ...
- <三剑客> 老大:awk命令用法
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一 个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是lin ...
- awk命令_Linux awk 命令用法详解
本文索引 awk命令格式和选项 awk模式和操作 模式 操作 awk脚本基本结构 awk的工作原理 awk内置变量(预定义变量) 将外部变量值传递给awk awk运算与判断 算术运算符 赋值运算符 逻 ...
- Java Me-List控件的用法案例
/** * Java Me-List控件的用法案例 */package com.xushouwei.cn; import java.io.IOException;import javax.microe ...
- Scala进阶之路-Scala中的枚举用法案例展示
Scala进阶之路-Scala中的枚举用法案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的枚举值和Java中的枚举值有点差别,不过使用起来也都差大同小异,我这 ...
- Hadoop基础-MapReduce的Partitioner用法案例
Hadoop基础-MapReduce的Partitioner用法案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Partitioner关键代码剖析 1>.返回的分区号 ...
- Hadoop基础-MapReduce的Combiner用法案例
Hadoop基础-MapReduce的Combiner用法案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编写年度最高气温统计 如上图说所示:有一个temp的文件,里面存放 ...
- 文本处理三剑客之AWK的用法
1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...
- jQuery中的ajax用法案例
什么是 AJAX? AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML). 简短地说,在不重载整个网页的情况下,AJAX 通过后台加载 ...
随机推荐
- centos 5.5版本中添加ext4格式
1.我在使用centos 5.5版本做练习的时候发现默认是不支持ext4文件格式. 在添加硬盘后,用fdisk -l 查看到信息如下: 分区完后,使用命令:mkfs -t ext4 /dev/sdb会 ...
- 自定义vue全局组件use使用、vuex的使用
自定义vue全局组件use使用(解释vue.use()的原理)我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们 ...
- spring boot 2.x 系列 —— spring boot 整合 druid+mybatis
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构 项目查询用的表对应的建表语句放置在resour ...
- Centos7安装Typecho详细教程
Centos7安装Typecho详细教程 首先搭建LAMPH环境 L linux 服务器(centos或者ubunt) .A Apache .M mysql .P PHP 安装Apache.PHP ...
- Jenkins+Python+GitLab持续集成
创建任务 登录Jenkins,点击左侧列表的新建选项.输入任务名称,选择构建一个自由风格的软件项目,点击确定. 配置 在任务配置界面,可以设置General标签中的丢弃旧的构建选项,设置保持构建的天数 ...
- usb口打印机的指令打印和驱动打印
打印机简介:是计算机的输出设备之一,用于将计算机处理结果打印在相关介质上. 打印机类型:激光打印机.喷墨打印机.针式打印机.热敏打印机等. 计算机和打印机之间的连接方式:usb口.串口.并口.网口.蓝 ...
- 正确写网站title、keywords、description
一.title title,也就是标题,是在浏览器上面显示出来的,方便用户了解这个页面的内容;特别是搜索引擎判断你网页内容的主要根据.搜索引擎就很大部分是依靠网站title来判断你网站是关于什么内容的 ...
- POJ 1485:Fast Food(dp)&& 面试题
题目链接 题意 给出 n 个餐厅,m 个停车场,现在要将 n 个餐厅中的 m 个变成停车场,使得每个餐厅到最近的停车场的距离之和最短,输出哪个餐厅变成停车场和它服务哪些餐厅,还有最短距离之和. 思路 ...
- 存储账户静态网站与Azure CDN
背景 把静态网站或文件托管在对象存储上,有很多可能很多好处,比如说:可以节省成本,因为相对虚机更便宜:性能更优,因为可以依赖于对象存储本身的高吞吐以及 CDN 的:更好的高可用性,因为也可以依赖于对象 ...
- redis 命令的调用过程
参考文献: Redis 是如何处理命令的(客户端) 我是如何通过添加一条命令学习redis源码的 从零开始写redis客户端(deerlet-redis-client)之路--第一个纠结很久的问题,r ...