awk和sed字符串处理速度比较与处理速度的测试方法

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dgd2010.blog.51cto.com/1539422/1566359

坚持不是胜利,坚持住才是胜利。

问题:比如现在有一需求,提取某个配置文件里面的ip地址,能立刻想到的就是根据字符串的规律合理的利用awk和sed来操作。

应用场景:做一套软件时,某个配置文件需要批量填写或更改已经填写好了的默认IP地址等信息(尽管在填写时IP地址可以简单的从某些文件或变量中获得,例如在Linux(CentOS6)等平台中可以借助source network congfig文件的方式)。

示例:配置文件中有这么一段,“<porttest host="192.168.0.142" application="video/portTest" timeout="10000" />”,如何取得IP地址呢?

字符串特征,该行中有两组数字,或5段数字,IP地址被“””括起来,可直接用awk截取第二段获取IP地址。

方法1,使用sed:


1

sed -n '/porttest /{s/.*host="//;s/".*//;p}' ./testfile

方法1分析:假设只有第一次匹配只匹配到一行,否则可以用head -n或tail -n来截断行,当然sed也有类似的功能。此处sed中采用了多个字命令,首先查找porttest的行,再将“host=””前的字符串换成空,再把“””后面的字符串换成空,再打印出来。

方法2,使用awk:


1

grep porttest ./testfile awk -F '"' '{print $2'}

方法2分析,同字符串特征一样,IP地址被“””括起来,可直接用awk截取第二段获取IP地址。

处理速度测试:


1

2

time sed -n '/porttest /{s/.*host="//;s/".*//;p}' ./test

time grep porttest ./test awk -F '"' '{print $2'}

测试结果:

sed的速度略微大于awk的速度,原因分析,可能由于awk处理的行中增加了grep和管道操作的原因。

本着测试的单一变量原则,处理一个相同的操作来比较一下。


1

2

time grep porttest ./test sed -n 's/.*host="//;s/".*//;p'

time grep porttest ./test awk -F '"' '{print $2'}

 

在多次测试的情况下,两者基本相似,可以说是相差并不大。

因此在实际中哪种方便就使用哪种,哪种熟练就使用哪种。

补充:sed使用正则表达式较多,擅长行处理,awk擅长列处理,更多用法可以参考《awk and sed》一书。

end

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1566359

时间: 2024-11-03 10:07:09

awk和sed字符串处理速度比较与处理速度的测试方法的相关文章

关于awk替换删除字符串的问题

问题描述 关于awk替换删除字符串的问题 原文件test.txt apple banana (随机不固定一行文本) orange peach pear tangerine watermelon 要求: 1. apple替换成strawberry 2. banana下面一行替换成litchi 3. 从orange开始到tangerine结束的行不要 最终的效果: strawberry banana litchi watermelon 求问大虾们awk应该怎么写? 解决方案 awk 字符串替换 gs

awk&amp;amp;sed小备忘

awk -F 'abc'  将abc作为分隔符 -F[abc]  将a, 或b, 或c作为分隔符.经常用. sed sed -e s:\{\"abc\":\\n\{\"abc\":g         按"abc"字符串截断分行. 福利: 放个优秀的正则链接到这儿!

[AWK]使用AWK进行分割字符串以及截取字符串

如何split当前的字符串,用$0,例如:  cat num.2012032911 | awk '{print $2}' | awk '{split($0,b,".");print b[2]}' | cut -c 3- 获取第二列,例如第二列是com.sb3456.you那么在split当前的这个字符串获得sb3456,最后截取sb3456字符串从第3个字符到最后的字符结果为456  b="c,d,e,f,g" echo | awk '{split("'$

Sed&amp;awk笔记之awk篇:快速了解Awk(一)

Sed&awk笔记之Sed篇完成之后,我又偷懒了一段时间,昨天狠狠地给自己抽根鞭子,一定要把这半个坑填上.相信看过Sed篇的同学都清楚,这一系列文章虽名日笔记,事实上有很多我自己个人的理解,加上遣词造句都是我自己的内容,所以转载一定要标明出处,详见文章后方. Awk是什么 Awk.sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以匹配文本,其中sed和awk还可以用于文本编辑,而grep则不具备这个功用.sed是一种非交互式且面向字符

Sed and awk 笔记之 sed 篇:简单介绍

自己博客上搬运过来的文章,抛砖引玉,系列原文地址:http://kodango.com/tag/sed-and-awk/,文章中的链接暂时还未修改,不好意思. 最近在阅读<sed & awk>,这本书是sed和awk相关书籍中比较经典的一本.我在读书的时候有一个习惯,就是会作一些笔记,如果有条件我会放到博客中.写博客不仅是给别人看的,更是写给自己看的,同时因为写给别人看,所以必然会在一些细节的地方写得很清楚明了,可以加深自己对原书的理解,同时以后回头看的时候,我自己也能快速的回忆起来.

awk命令详解

来源:http://caoyanbao.iteye.com/blog/570868 来源:http://blog.sina.com.cn/s/blog_6ceed3280101dsir.html 什么是awk?  你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度.awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写.事实上,awk是

shell学习笔记2---awk字符串处理(原创)

awk内置字符串函数gsub(r,s) 在整个$0中用s替代r:gsub(r,s,t) 在整个t中用s替代r gsub函数有点类似于sed查找和替换.它允许替换一个字符串或字符为另一个字符串或字符,并以正则表达式的形式执行.第一个函数作用于记录$0,第二个gsub函数允许指定目标,然而,如果未指定目标,缺省为$0.index(s,t):函数返回目标字符串s中查询字符串t的首位置.length(s) :返回s长度match(s,r): 测试s是否包含匹配r的字符串split(s,a,fs) 在fs

使用awk和grep做简单的统计

grep 或 egrep 或awk 过滤两个或多个关键词: grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行 egrep '123|abc' filename //用egrep同样可以实现 awk '/123|abc/' filename // awk 的实现方式     假如某个广告点击数据记录在文件里面,文件中每一行数据由'时间','uid'两个字段组成,要求每分钟统计某个uid带来的点击量并计入数据库,可以用shell来

shell字符串操作详解_linux shell

1.shell变量声明的判断 表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 * ${var=DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:=DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 * ${