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

awk实例一:简单入门

阅读更多

Awk是一种处理结构数据并输出格式化结果的编程语言, Awk 是其作者 "Aho,Weinberger,Kernighan" 的简称。

Awk通常被用来进行格式扫描和处理。通过扫描一个或多个文件中的行,查看是否匹配指定的正则表达式,并执行相关的操作。

Awk的主要特性包含:

1. Awk以记录和字段的方式来查看文本文件

2. 和其他编程语言一样,Awk 包含变量、条件和循环

3. Awk能够进行运算和字符串操作

4. Awk能够生成格式化的报表数据

Awk从一个文件或者标准输入中读取数据,并输出结果到标准输出中。

1.  Awk的语法

  1. Syntax:    
  2.     
  3. awk '/search pattern1/ {Actions}    
  4.      /search pattern2/ {Actions}' file    
 

在上诉语法中:

1. search pattern是正则表达式

2. Actions 输出的语法

3. 在Awk 中可以存在多个正则表达式和多个输出定义

4. file 输入文件名

5. 单引号的作用是包裹起来防止shell 截断

 

2.  Awk的工作方式:

1) Awk 一次读取文件中的一行

2)对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的 Action

3)如果没有匹配上则不执行任何动作

4)在上诉的语法中, Search Pattern 和 Action 是可选的,但是必须提供其中一个

5)如果 Search Pattern 未提供,则对所有的输入行执行 Action 操作

6)如果 Action 未提供,则默认打印出该行的数据

7) {} 这种 Action 不做任何事情,和未提供的 Action 的工作方式不一样

8) Action 中的语句应该使用分号分隔

创建一个包含下面内容的文本文件employee.txt 。后续的例子中将会用到该文件

 

 

  1. $cat employee.txt    
  2. 100  Thomas  Manager    Sales       $5,000    
  3. 200  Jason   Developer  Technology  $5,500    
  4. 300  Sanjay  Sysadmin   Technology  $7,000    
  5. 400  Nisha   Manager    Marketing   $9,500    
  6. 500  Randy   DBA        Technology  $6,000    
 

 

 

3.  Awk 的默认行为

默认的时候awk 打印文件中的每一行

 

  1. $ awk '{print;}' employee.txt    
  2. 100  Thomas  Manager    Sales       $5,000    
  3. 200  Jason   Developer  Technology  $5,500    
  4. 300  Sanjay  Sysadmin   Technology  $7,000    
  5. 400  Nisha   Manager    Marketing   $9,500    
  6. 500  Randy   DBA      Technology  $6,000    

 

 

在上面的例子中,匹配的正则表达式未给出,因此后续的Action 适用所有的行, Action 中的 print 没有任何参数的情况下将打印整行,注意其中的 Action 必须使用 {} 括起来。

4.  Awk打印匹配的行

 

 

  1. $ awk '/Thomas/    
  2. > /Nisha/' employee.txt    
  3. 100  Thomas  Manager    Sales       $5,000    
  4. 400  Nisha   Manager    Marketing   $9,500    
 

 

 

在上面的例子中,将打印包含Thomas 和 Nisha 的行,上面的列子包含两个正则表达式。 Awk 可以接受任意数量的正则表达式,但是每个组合 ( 正则表达式和对应的 Action) 必须用新行来分隔。

5.  Awk仅打印指定的域

Awk包含许多内建的变量,对于每行的记录, Awk 默认按照空格进行分割,并将分隔后的值存入对应的 $n 变量中。如果一行还有 4 个单词,将被分别存储进 $1 $2 $3 $4 中,其中 $0 代表整行。 NF 也是一个内建的变量,代表该行中分割后的变量数。

  1. $ awk '{print $2,$5;}' employee.txt    
  2. Thomas $5,000    
  3. Jason $5,500    
  4. Sanjay $7,000    
  5. Nisha $9,500    
  6. Randy $6,000    
  7. $ awk '{print $2,$NF;}' employee.txt    
  8. Thomas $5,000    
  9. Jason $5,500    
  10. Sanjay $7,000    
  11. Nisha $9,500    
  12. Randy $6,000   
 
 

在上诉例子中$2 和 $5 分别代表名字和薪水,也可以使用 $NF 获得薪水,其中 $NF 代表最后一个字段,在打印语句中逗号是一个连接符号。

6.  Awk开始和最后的动作

Awk包含两个重要的关键字 BEGIN 和 END

 

 

  1. Syntax:     
  2.     
  3. BEGIN { Actions}    
  4. {ACTION} # Action for everyline in a file    
  5. END { Actions }    
  6. # Awk中的注释    
 

 

 

在BEGIN 节中的 Actions 会在读取文件中的行之前被执行。

而END 节中的 Actions 会在读取并处理文件中的所有行后被执行。

 

 

  1. $ awk 'BEGIN {print "Name/tDesignation/tDepartment/tSalary";}    
  2. > {print $2,"/t",$3,"/t",$4,"/t",$NF;}    
  3. > END{print "Report Generated/n--------------";    
  4. > }' employee.txt    
  5. Name Designation Department Salary    
  6. Thomas   Manager   Sales           $5,000    
  7. Jason   Developer   Technology   $5,500    
  8. Sanjay   Sysadmin   Technology   $7,000    
  9. Nisha   Manager   Marketing   $9,500    
  10. Randy   DBA     Technology   $6,000    
  11. Report Generated    
  12. --------------    
 

 

 

上述的例子为输出结果增加头和尾描述

7.  Awk找出员工 ID 大于 200 的员工

 

 

  1. $ awk '$1 >200' employee.txt    
  2. 300  Sanjay  Sysadmin   Technology  $7,000    
  3. 400  Nisha   Manager    Marketing   $9,500    
  4. 500  Randy   DBA        Technology  $6,000    
 

 

 

在上述例子中,$1 代表员工 ID ,如果员工 ID 大于 200 则执行默认的打印整行的 Action 。

8.  Awk打印技术部员工

$4代表员工所在的部门,如果等于 Technology 则打印出整行

 

 

  1. $ awk '$4 ~/Technology/' employee.txt    
  2. 200  Jason   Developer  Technology  $5,500    
  3. 300  Sanjay  Sysadmin   Technology  $7,000    
  4. 500  Randy   DBA      Technology  $6,000    
 

 

 

~操作符是和正则表达式中的值进行比较,如果匹配则打印整行

9.  Awk打印技术部门的员工数

在下面的例子中,检查员工的部门是否是Technology ,如果是则递增 count 变量的值。 Count 变量的值在BEGIN 的 Actions 中被初始化为 0 。

 

 

  1. $ awk 'BEGIN { count=0;}    
  2. $4 ~ /Technology/ { count++; }    
  3. END { print "Number of employees in Technology Dept =",count;}' employee.txt    
  4. Number of employees in Tehcnology Dept = 3    
 

 

 

在处理的最后(END 的 Actions) ,仅仅打印出 Technology 部门的人数

 

转自:http://blog.csdn.net/andyxm/article/details/5964071

分享到:
评论

相关推荐

    awk实例入门教程.pdf

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

    awk编程语言入门

    awk 编程语言入门 awk 编程语言是一种功能强大的命令行语言,主要用于处理文本数据。它可以读取文件或其他命令的输出,并根据条件进行查找和操作。awk 的设计思想很简单,但在实际操作中却很复杂。 awk 中的记录、...

    awk教程入门到精通

    awk 教程入门到精通 awk 是一种功能强大的文本处理工具,它可以对文本进行处理、格式化和输出。awk 的主要用途是处理文本文件,提取和处理数据,生成报表等。下面是一份 awk 教程,从基础知识到高级应用,涵盖了 ...

    awk入门到精通.pdf

    《awk入门到精通》这本书是针对Linux环境下的awk语言学习指南,主要讲解了awk作为一款强大的文本处理工具的使用方法。awk是一种编程语言,它的特点是无需预编译,使用直译器,变量无类型,支持关联数组,这使得awk...

    AWK 应用程序入门与实例

    ### AWK 应用程序入门与实例 #### Awk简介及基本概念 Awk是一种功能强大的文本处理语言,尤其适用于处理结构化的数据文件,并能够轻松完成格式化输出、数据分析等任务。尽管其名称可能看起来有些怪异,但其实用性...

    awk脚本学习快速入门

    本资料包是针对awk脚本学习的快速入门教程,旨在帮助初学者快速掌握awk的基本用法和高级技巧。 一、awk简介 awk是由Aho、Weinberger和Kernighan三位大牛命名的(取首字母),最初设计用于处理结构化的文本数据,如...

    AWK命令资源收集.rar

    本资源包包含了关于AWK的实用资料,包括一个PDF实例教程和一个简明使用指南。 1. **AWK基础** - **变量**:AWK中的变量是自动声明的,无需预定义类型,可以是数字或字符串。 - **模式和动作**:AWK程序由模式和...

    awk真实实例

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

    awk教程-awk教程.rar

    - **《每天学习一个命令:awk 处理文本》**:这本书可能包含了awk的基础操作和实例,适合初学者入门。 - **《awk 入门教程_阮一峰的网络日志》**:阮一峰老师的教程通常深入浅出,易于理解,适合快速了解awk的基本...

    awk完全教程

    ### AWK完全教程知识点解析 ...通过理解和应用本教程中的知识点,读者将能够利用AWK解决各种实际问题,从简单的数据筛选到复杂的文本分析。随着实践的深入,AWK将成为解决日常数据处理挑战的有效工具。

    awk命令详解

    入门实例: 假设 last -n 5 的输出如下: [root@www ~]# last -n 5 仅取出前五行 root pts/1 192.168.1.100 Tue Feb 10 11:21 still logged in root pts/1 192.168.1.100 Tue Feb 1000:46 - 02:28 (01:41) root ...

    Linux下的AWK入门教程.docx

    AWK 的入门实例中,例如使用 last -n 5 的输出,使用 AWK 只显示最近登录的 5 个帐号。工作流程是这样的:读入有 n 换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0 则表示所有域,$1 表示第一...

    awk入门及提高.pdf

    awk是一种编程语言,常用于文本和数据处理,尤其擅长处理具有记录和字段型态的数据。它是一个解释器,无需提前编译。awk的变量无类型之分,可以将字符串作为数组的下标使用,这称为关联数组。这些特性使得使用awk...

    AWK程序设计语言

    第一章快速入门部分介绍了AWK程序的结构和运行方式,包括如何处理错误。初学者可以通过简单的输出示例,了解如何打印每一行文本、特定字段以及字段数量(NF)、行号等。此外,还包括了如何进行更精美的输出,例如...

    awk tutorial and introduction 英文版

    awk程序由一系列规则组成,每个规则包括一个模式和一个动作。模式定义了在哪些行上执行动作。例如: ```bash awk 'pattern { action }' ``` 当输入数据匹配到模式时,就会执行相应的动作,动作可以是打印、计算、...

    awk入门教程

    ### awk入门教程知识点详解 #### 一、概述 **awk** 是一种强大的文本处理工具,最初由 AT&T 贝尔实验室的 Alfred Aho、Peter Weinberger 和 Brian Kernighan 开发。它主要应用于 Unix 系统中,用于数据加工和信息...

    Linux入门培训教程 linux awk 多文件操作2种实现方法.pdf

    本文将详细介绍两种常用的awk多文件操作方法,并结合具体实例来帮助理解。 #### 二、第一种方法:通过外部命令合并文件并使用awk处理 **实现思路**: 1. **文件合并与排序**:首先使用`cat`命令将两个文件的内容...

    shell最全基础2020年入门—从熟悉grep、sed、awk开始

    前言 在IT行业中,Shell作为Unix和Linux操作系统的核心组件之一,扮演着用户与系统交互...本文旨在提供一个基础的入门指南,希望对你有所帮助。在实践中不断探索和学习,你会发现自己在文本处理上的能力得到显著提升。

Global site tag (gtag.js) - Google Analytics