`
hsabby
  • 浏览: 21003 次
社区版块
存档分类
最新评论
  • Rainyn: 作者写的很好。有完整项目实例吗?这个是跑在tomcat还是je ...
    初识cometd
  • hwfrog: 这个没有看过具体的源码,猜测的,因为init是所有用户进程的父 ...
    inittab的使用
  • hwfrog: 确实简单,这个感觉和RCP很类似,RMI在某些地方还是有一定的 ...
    Java的RMI初探
  • hwfrog: 不错, 学习了; 这段时间也想研究一下源码, 多交流
    初识cometd
  • hwfrog: 后面准备总结一下java的接口和内部类; 请博主多关注哈
    Java访问修饰符

awk中的字符串处理函数

 
阅读更多
背景:使用awk从日志中解析出对应的字段;
日志格式如下所示,需要解析出ip、date、url以及action取值;其中action的位置不固定,不一定是作为第一个参数出现
10.10.10.10 - - [31/Jul/2013:03:30:44 +0000] GET /url?action=dosometion&a=0&b=20&c=0&d=66&e=3&f=3&g=20 HTTP/1.1 "200"

分析:前面三个字段都可以通过简单的分割来获取,只是最后一个action字段,因为位置不固定,导致无法直接通过分割获取。好在,awk提供了相关的字符串函数供我们使用。
gsub(r,s) 在整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分


从上面的函数中,我们发现,substr这个函数可以帮助我们取回想要的字符串;只要通过index获取到对应的位置;但是为了定位真正的长度,需要split配合使用,找到结束符&的位置。

实现实例:
awk -F'[ ?&=]' '{split($0,mydata,"action="); print $1,$4,$7, substr(mydata[2], 0, index(mydata[2], "&")-1)}' access.log-20130731 > tmp2.log

其中,split把整行划分为两部分,“action=”前面的部分和后面的部分。之后,通过index函数,定位“action=”后第一个出现的“&”的位置,并通过substr函数,把action的值取出来。需要注意的是,substr使用的时候,函数中的index函数返回的位置,必须是基于substr中传入的字符串而言,否则,会出现错误的结果。

提醒:基于字符串的操作,是非常耗性能的。如果不是必须,不要使用字符串操作函数,尽可能利用分割获取对应的取值。上述例子,同样大小的文件,如果action的位置固定,直接使用分割获取和采用字符串函数获取,性能相差几十倍以上。
分享到:
评论
2 楼 hsabby 2013-08-14  
连载啊,未必有呢;用到了再说啊
1 楼 hwfrog 2013-08-13  
学习了,awk应该不仅仅只有这些,期待博主的连载

相关推荐

    awk笔记 算数函数、字符串函数

    在给定的文件信息中,我们探讨了AWK这一强大文本处理工具中的算数函数、字符串函数以及其他功能,包括时间函数。以下是对这些知识点的详细解释: ### 算数函数 1. **atan2(y,x)**:此函数计算坐标 (x,y) 的角度...

    Python实现像awk一样分割字符串

    在编程世界中,awk 是一个强大的文本分析工具,尤其在处理和分割字符串方面表现出色,它能够优雅地处理多个连续空格。然而,在 Python 中,`str.split()` 方法默认会将每个空格视为一个分隔符,导致多个连续空格被...

    awk编程语言入门

    * 字符串函数:awk 中有多种字符串函数,如 sub、gsub、index、substr、split、length、match 等,用于对字符串进行操作。 * 数学函数:awk 中有多种数学函数,如 atan2、cos、exp、int、log、rand、sin、sqrt 等,...

    Shell脚本中计算字符串长度的5种方法

    在日常的Shell脚本开发工作中,我们经常需要处理字符串,其中计算字符串长度是一个常见的需求。本文将详细介绍五种在Shell脚本中计算字符串长度的方法,并对每种方法进行详细的解析,帮助读者更好地理解和掌握这些...

    linux 字符串操作

    `awk match` 用于查找子字符串在字符串中的位置。 #### 十、替换字符串 在 Linux 中,可以使用 Bash 内置的字符串替换功能或者 `awk` 和 `sed` 命令来进行字符串替换。 1. **使用 `${variable//pattern/...

    Linux AWK内置函数

    以上内容详细介绍了 Linux 下 AWK 的内置函数,包括算术函数和字符串函数。这些函数可以帮助开发者在进行文本处理时更加灵活高效。通过这些函数,我们可以轻松实现数据过滤、字符串操作等功能,从而提高工作效率。

    linux中shell脚本中awk的深入分析

    * 使用 awk 分割字符串:`awk 'BEGIN {split("123#xuyunbo#aini", dong1, "#"); print dong1[1]}'` * 使用 awk 生成报表:`awk -f awk4.sh` awk 是一个功能强大且灵活的文本处理工具,广泛应用于 Linux 系统中的...

    shell字符串的截取

    Shell 字符串截取是指在 Shell 编程中对字符串进行截取、查找、替换等操作。下面将详细介绍 Shell 字符串截取的知识点。 一、字符串截取 Shell 字符串截取可以使用多种方法,以下是一些常见的方法: 1. 使用 expr...

    Effective awk Programming, 4th Edition[awk高效编程4版]

    书中详细介绍了字符串函数,如length、index、sub、gsub等,以及如何进行字符串的拼接和比较。此外,书中还涵盖了数组的使用,包括关联数组和数值数组,它们允许开发者存储和处理多组相关数据。 模式匹配是awk的一...

    awk教程入门到精通

    awk 有多种函数,包括数学函数、字符串函数、时间函数等。数学函数包括 sqrt、sin、cos 等,字符串函数包括 substr、index、match 等,时间函数包括 systime、strftime 等。 awk 的应用 awk 的应用非常广泛,包括...

    Sed与awk_中英文高清版

    Awk的强大之处在于它内置了丰富的内建函数,可以轻松处理数值计算、字符串操作以及文件操作。 在《Sed与Awk》这本书中,读者可以深入学习到: 1. Sed的基本概念:了解Sed的工作流程,包括命令行选项、模式空间、...

    awk教程所速度

    awk还具备大量的内置函数,这些函数可以分为数值函数、字符串函数和系统函数三类。数值函数包括了三角函数、指数、对数和平方根等。字符串函数有用于长度计算、索引查找、子字符串操作、字符串分割等,nawk和gawk...

    Shell字符串截取的详细方法

    `awk`的`substr`函数用于提取字符串的一部分。 3. 使用`cut`命令: ```bash echo "$a"|cut -c1-8 ``` `cut`命令的`-c`选项用于指定字符范围。 4. 使用`expr`的模式匹配: ```bash echo $5:expr "$a" : '\(....

    awk man中文手册(全)

    - **函数**:`awk` 内置了多个函数,如 `split()` 分割字符串,`printf()` 格式化输出等,同时可以编写自定义函数。 - **BEGIN 和 END 规则**:`BEGIN` 规则在处理任何输入前执行,`END` 规则在处理完所有输入后...

    linux目录下的awk讲解

    awk还提供了许多内置的字符串函数,如`length(str)`返回字符串长度,`split(str, arr, fs)`根据分隔符fs将str分割成数组arr,`index(str1, str2)`返回str2在str1中的位置,`substr(str, pos[, len])`返回str从pos...

    The AWK Programming Language 中文版

    AWK的语法简洁,提供了丰富的内置函数和灵活的数据处理能力,使得它成为数据处理领域中的一个利器。AWK也能够与其他程序交互,进一步拓展了其应用范围。对于任何需要处理文本数据的用户,AWK都值得学习和掌握。

    awk知识文档学习

    Awk的特殊变量如OFS,以及printf函数中的格式说明符可以用于复杂的格式化需求,例如: - **转义序列**: 例如/b、/f、/n、/r分别表示退格、换页、换行、回车。 - **格式说明符**: 用于指定数据类型的显示格式,例如%...

Global site tag (gtag.js) - Google Analytics