`
standalone
  • 浏览: 610974 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

awk使用实例

阅读更多
awk使用实例(转载)
2009-08-25 16:41
简介

awk是一种编程语言,非常适合处理文本,使用简单,功能却很强大。awk扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行

示例

基本使用

输出文件的第一列

awk '{print $1}' access_log

使用自定义的分隔符(默认是空格)

awk -F ', ' '{print $1}' access_log
awk -F '&q=' '{print $2}' access_log

条件判断

awk '$9==304 {print}' access_log
awk '$6 > 0 {print $10}' access_log  

正则匹配

awk '$7~/^\/ppp/ {print $7}' access_log
awk '$7!~/^\/manage/ {print $7}' access_log

显示多个字段

awk '{print $1, $6}' access_log

改变输出格式

awk '{print "req:\t" $7 "\t" $9}' access_log

使用printf格式化输出

awk '{printf("req:\t%s\t%.2f\n", $6, $9)}' access_log

使用外部文件

当脚本比较复杂时,可以将脚本放到外部文件,通过-f选项指定

awk -f slowreq.awk access.log

外部文件内容:

$6 > 0 {
        split($10,a,"?");
        req=a[1];
        print req;
        
}

BEGIN和END块

awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。同时awk在处理了输入文件中的所有行之后会执行END块。通常,END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息

对某一列求和

awk 'BEGIN{sum=0} {sum=$9+sum} END {print "sum " sum}' data

内部变量

常用的包括

  • FS 输入的分隔符,也就是-F指定的
    awk 'BEGIN {FS="-"}{print $3}' access_log
  • OFS 输出的分隔符
    awk 'BEGIN {OFS="-"}{print $1, $6}' access_log
  • FNR 输入文件的记录数
    // 求平均数
    awk 'BEGIN{sum=0} {sum=$9+sum} END {print "average " sum / FNR}' access_log
  • NF 当前行的字段数
    // 从第6个字段开始输出
    awk '{for(i=6; i<NF; ++i){printf "%s,",$i};printf "%s\n", $NF}' access_log
  • NR 当前处理的行数
    // 从第6行开始输出,到100行为止,并打印出行数
    awk '{if(NR >= 6 && NR <=100) printf "%d: %s\n", NR, $7}' access_log

组合使用

awk通常都与sort等命令组合使用

// 输出第七个字段的前10名
awk '{print $7}' access_log|sort |uniq -c |sort -n -r |head -10

参考资料

转载自:http://blog.csdn.net/chenqj/archive/2008/10/08/3032392.aspx

另外,求平均数用awk 'BEGIN{sum=0} {sum=$9+sum} END {print "average " sum / FNR}' access_log要远远比使用awk先取出所需列,然后使用for循环求和后再取平均值的效率要高得多得多。

分享到:
评论

相关推荐

    sed和awk使用实例

    sed 和 awk 使用实例 Sed 和 Awk 是两种强大的命令行工具,在 Unix 和 Linux 系统中广泛应用于文本处理和数据处理。本文将通过一些实例来展示 Sed 和 Awk 的使用场景和方法。 一、sed 使用实例 1. 删除 login....

    AWK编程实例指南.rar_AWK ns2_awk_awk unix.shell_awk编程实例

    "awk编程实例"意味着这个压缩包特别关注AWK的实际应用,提供了一系列的编程示例,帮助用户理解和掌握AWK的使用技巧。这些实例可能涵盖简单的数据提取到复杂的逻辑处理,有助于提升用户在数据处理方面的技能。 总的...

    awk用法__都是例子

    awk 命令用法详解 awk 是一个功能强大且灵活的文本处理工具,它可以对文本进行各种操作,如搜索、匹配、计算、格式化等。awk 的基本语法为 `awk 'pattern {action}' file`,其中 `pattern` 是模式,`action` 是对...

    shell awk实用实例教程

    以下是一些使用Awk的基本概念和实例: 1. **字段分隔符(Field Separators)**:默认情况下,Awk将空格或制表符作为字段分隔符。你可以使用`-F`选项自定义分隔符,例如`awk -F ":"`将用冒号分隔字段。 2. **模式...

    AWK实例教程 AWK实例教程中文版

    ### AWK实例教程知识点解析 #### 一、AWK简介及背景 - **AWK**是一种功能强大的文本处理工具,最初由贝尔实验室的Alfred Aho、Peter Weinberger和Brian Kernighan共同开发,因此得名AWK。尽管这个名字听起来有些...

    awk实例详解——Unix下awk的使用

    默认情况下,`awk`使用空格或制表符作为字段分隔符(Field Separator, FS)。但可以通过`-F`选项或内部变量`FS`自定义分隔符,如`awk -F: '{print $1}'`以冒号为分隔符打印第一列。 **3. 内置变量** `awk`提供了...

    Awk命令使用实例.docx

    ### Awk命令使用详解 #### 一、Awk简介 Awk是一种强大的文本处理语言,专为高级文本处理和数据分析而设计。它被广泛应用于快速编写脚本来处理文本文件,如日志文件、配置文件等。Awk的核心功能在于能够方便地对文本...

    awk 使用手册

    默认情况下,`awk`使用空格或制表符作为字段分隔符(Field Separator, FS)。可以通过内置变量`FS`来改变这个行为,例如: ```bash awk -F ',' '{ print $1 }' file.csv ``` 这会将逗号作为字段分隔符,打印CSV文件...

    awk真实实例

    【awk真实实例】这篇文章主要介绍了awk这种强大的文本处理语言,并通过一系列实例帮助新手入门。awk是一种专门用于文本处理和报表生成的语言,虽然它的名字有些奇特,但其功能强大且易于学习。 awk的语法简洁明了,...

    grep,sed,awk命令实例大练习

    ### grep、sed、awk命令实例大练习 在Linux或Unix环境中,`grep`、`sed`和`awk`是三个非常强大的文本处理工具。通过掌握这些工具的基本用法及高级功能,用户可以高效地处理各种文本文件。下面将详细介绍如何使用...

    AWK详细文档 使用手册

    **AWK详解与使用手册** AWK是一种强大的文本分析工具,尤其在处理结构化数据时,它的灵活性和高效性使其成为Unix/Linux环境中的得力助手。这个文档将深入讲解AWK的基本概念、语法以及实际应用。 ### 1. **AWK基础...

    awk教程入门到精通

    下面是一份 awk 教程,从基础知识到高级应用,涵盖了 awk 的基本概念、语法、函数和应用实例。 awk 基础知识 awk 的基本结构是 pattern{action},其中 pattern 是awk的模式, action 是awk的动作。awk 的模式可以...

    AWK使用手册.pdf

    《AWK使用手册》是专为帮助读者快速掌握AWK编程语言而编写的,通过一系列具有代表性的实例和解析,让读者逐步理解并熟练运用AWK处理数据和生成报表。AWK是一种强大的文本分析工具,它能对输入数据(如文件、标准输入...

    awk实例入门教程.pdf

    ### awk实例入门教程知识点解析 #### 一、awk语言简介 awk是一种专为文本处理设计的强大脚本语言,尤其适用于数据格式化、过滤和报告生成。它的命名来源于三位创造者:Alfred Aho、Peter Weinberger 和 Brian ...

    UNIX Shell awk sed 实例 精解 (第4版)

    本指南将深入解析这些工具的使用实例和精解,帮助读者理解并掌握这些强大的命令行工具。 **Bash Shell** 是Linux系统中的默认shell,它是一种交互式、解释型的命令行接口。Bash提供了一系列的命令、变量、运算符...

    最牛逼的Linux awk命令详细介绍和实例快速学习

    最牛逼的Linux awk命令详细介绍和实例快速学习

Global site tag (gtag.js) - Google Analytics