`
marb
  • 浏览: 422598 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

awk使用

 
阅读更多

简介

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

  • 命令行选项 -F"[@ /t]" 告诉awk @, 空格和Tab都是字段分隔符,例如:

     

    awk -F"[@ /t]" '{print $2,$3}' test

    以@,空格,Tab键分割test文件的每一行,并输出第二、第三列。

     

    awk '$2~/^(126|yahoo)/{print $2, $3}' test

    如果改行的第二个字段以"123"或"yahoo"开始,则输出改行的第二、第三列。

     

    awk '$1~/[0-9][0-9]$/{print $1, $3}' test

    如果改行的最后两个字段以数字结束,则输出改行的第一、第三列。

     

    awk '/mail/{print $0}' test 

    输出test文件中含有"mail"字符串的行

     

    $awk '$2~/mail/{print $0}' test

     

    输出test文件中第二个字段含有"mail"字符串的行

     

    $awk '$2 == "gmail.com"{$1 = "ggg";print}' test

    输出test文件中第二个字段是"gmail.com"的行,并把改行第一列改为"ggg"

     

    awk '$2 == "gmail.com"{$1 = "ggg"}{print}' test

     

    输出test文件中所有行,并且如果第二个字段是"gmail.com",把改行第一列改为"ggg"

     

    awk '{IGNORECASE=1;if($2 ~/^[a-z]/&& $2~/net$/){print $0}}' test

    打开test文件,忽略字母大小写,如果第二字段以[a-z]开头,并以"net"结尾,则输出该行。

分享到:
评论

相关推荐

    awk使用手册,awk使用手册

    ### Awk 使用手册详解 #### 一、Awk 简介 Awk 是一种功能强大的文本处理工具,广泛应用于 Unix 和类 Unix 系统中。它的名字来源于三位设计者的名字首字母:Aho (Peter)、Weinberger (Brian) 和 Kernighan (Doug)。...

    awk使用手册awk使用手册

    ### awk 使用手册详解 #### 一、awk简介与基本概念 awk 是一款强大的文本处理工具,在 Unix 和类 Unix 操作系统中广泛使用。它最初由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 开发,因此得名 awk(取自...

    sed和awk使用实例

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

    Unix awk 使用手册

    ### Unix awk 使用手册详解 #### 什么是awk? `awk`,这个名字源于其创造者Aho、Weinberg和Kernighan的首字母缩写,是一个功能强大的文本处理工具,尤其在Unix环境中广受欢迎。与常见的`grep`和`sed`工具相比,`...

    AWK使用手册 介绍在linux如何使用awk工具

    ### AWK使用手册知识点 #### 一、AWK简介与适用场景 - **AWK**是一种专门用于文本处理和报告生成的脚本语言,在Linux环境下非常流行。 - **适用问题**:AWK适用于处理结构化的文本文件,尤其擅长处理那些包含特定...

    awk使用基本理论

    ### awk使用基本理论 #### 一、awk简介与版本 - **awk** 是 Linux Shell 三剑客之一,主要用于文本处理。它是一种强大的文本分析工具,可以在数据流中搜索匹配的模式并执行相应的操作。 - **awk** 有三个主要版本...

    unix awk使用手册

    ### Unix Awk 使用手册知识点详解 #### 一、Awk 的起源与发展 - **起源**:Awk 语言由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 在 20 世纪 70 年代末期共同创造,其名称正是来源于这三位发明者的姓氏首...

    Unix awk使用手册

    此外,由于`awk`通常作为Unix/Linux系统的一部分预装,用户无需额外安装即可直接使用,这使得它成为一个易于获取和使用的工具。 在处理文本数据时,`awk`的优势在于它可以方便地处理分隔符,如空格或制表符,使得...

    awk使用手册详解_有例子

    ### awk使用手册详解知识点 #### 一、awk简介与适用场景 - **awk**是一种用于文本处理的强大脚本语言,特别适用于处理具有行(Record)和字段(Field)形式的数据。 - **适用问题**:awk适合处理那些需要从文本文件...

    awk使用详解(官方文档翻译)

    ### AWK 使用详解知识点 #### 一、AWK 概述与适用场景 - **AWK 的定位**:AWK 是一种专为文本处理设计的脚本语言,它结合了强大的文本处理能力和易于上手的特点,非常适合用于数据分析、报告生成等应用场景。 - **...

    AWK使用手册.pdf

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

    AWK使用简介.pdf

    ### AWK使用简介 #### 一、AWK概述 AWK是一种专为文本处理而设计的编程语言,广泛应用于Linux/Unix环境中。它能够高效地处理来自标准输入、单个或多个文件,甚至其他命令输出的数据。作为一种强大的编程工具,AWK...

    unix之AWK使用小解

    ### Unix之AWK使用详解 #### 一、AWK简介 AWK是一种强大的文本处理工具,在Unix和类Unix操作系统中广泛使用。它不仅能够高效地处理数据,还具备一定的编程能力,可以用来编写复杂的脚本。 #### 二、基本语法与...

    Linux主要shell命令、sed、awk使用详解

    Linux 主要shell命令、sed、awk使用详解 Linux 主要shell命令详解 shell 是用户和 Linux 操作系统之间的接口。Linux 中有多种 shell,其中缺省使用的是 Bash。本章讲述了 shell 的工作原理,shell 的种类,shell ...

    shell编程的awk使用(重点推介)

    ### Shell编程中的AWK使用详解 #### 一、AWK简介 AWK 是一种功能强大的文本处理工具,其名称来源于三位创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的首字母。它不仅广泛应用于 Linux 环境,也是任何...

Global site tag (gtag.js) - Google Analytics