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

Awk介绍及print语句

阅读更多

原文地址: http://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples/

 

这个而里面排版不好编排,请下载pdf的格式阅读。翻译水平有限,欢迎拍砖。

 

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

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

Awk的主要特性包含:

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

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

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

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

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

1.  Awk的语法

Syntax:

awk '/search pattern1/ {Actions}
     /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 。后续的例子中将会用到该文件

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

3.  Awk 的默认行为

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

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

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

4.  Awk打印匹配的行

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

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

5.  Awk仅打印指定的域

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

$ awk '{print $2,$5;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000
$ awk '{print $2,$NF;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000
 

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

6.  Awk开始和最后的动作

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

Syntax: 

BEGIN { Actions}
{ACTION} # Action for everyline in a file
END { Actions }
# Awk中的注释
 

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

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

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

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

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

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

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

8.  Awk打印技术部员工

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

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

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

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

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

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

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

分享到:
评论

相关推荐

    LINUX的awk和sed的常用用法

    awk 中可以使用 if 语句来进行条件判断,例如 awk '{if($4~/Brown/) print $0}' tab2 等效于 awk '$0 ~ /Brown/' tab2。 awk 中可以使用 BEGIN 语句来设置变量,例如 awk '{print NF,NR,$0}END{print FILENAME}' ...

    awk命令详解 包括详细的组合结构

    本篇文章将详细介绍awk命令的使用,包括其基本语法、模式与动作、域和记录以及条件操作符。 1. **调用awk** awk命令的调用有两种主要方式: - 命令行方式:`awk [-F field-separator] 'commands' input-file(s)`。...

    The AWK Programming Language 中文版

    输出方面,AWK提供了 `print` 和 `printf` 语句,并能将输出重定向到文件或者管道。 ### AWK在数据处理中的应用 在数据转换和归约方面,AWK能够进行列求和、计算百分比和分位数等。在数据验证方面,AWK可以检查数据...

    awk教程入门到精通

    awk 的模式可以是条件语句、正则表达式或变量。awk 的动作可以是打印输出、赋值、算术运算等。 awk 的基本语法 awk 的基本语法是: awk 'pattern{action}' file 其中,pattern 是awk的模式,action 是awk的动作...

    shell 里 awk print 的用法详解

    除了基本的`print`,awk还支持格式化输出、条件语句、循环结构以及函数,使得它在处理文本数据时具有很高的灵活性和功能性。例如,可以使用`printf`进行格式化输出,`if...else`进行条件判断,`for`和`while`实现...

    awk教程-awk教程.rar

    - **模式(Pattern)**:模式可以是正则表达式或简单的条件语句,awk会根据模式来决定是否处理当前行。 - **动作(Action)**:当模式匹配时,awk执行相应的动作,通常是一段代码,如打印、计算等。 ### 2. awk...

    awk入门最好的资料

    awk支持条件语句,如`if...else`,用于基于特定条件执行不同的动作: ```awk awk '{if ($1 > 10) print $0; else print "Value is less than 10"}' ``` ### 6. 函数 awk内置了多个函数,如`length()`(返回字符串...

    awk小结(by ruson)

    - `awk '{print $0, $NF + 10}' data.txt` 通过以上对“awk小结(by ruson)”中的关键知识点的详细解读,可以看出 awk 是一个非常强大且灵活的文本处理工具,适用于各种复杂的文本处理任务。无论是简单的数据筛选...

    awk用法详解

    通过以上介绍,可以看出awk是一种非常强大的文本处理工具,它不仅适用于简单的文本分析,还可以应用于较为复杂的文本数据处理场景。掌握了awk的基本用法后,开发者可以利用其丰富的内置功能快速开发出高效的数据处理...

    awk用法小结--有关awk的材料

    #### 三、awk的基本语法及内部变量 **awk** 的基本语法格式如下: ```sh awk 'pattern {action}' filename ``` - **pattern**:模式,用于指定处理哪些行。 - **action**:当模式匹配成功时执行的动作。 - **...

    awk真实实例

    通过在print语句中添加文本标签,可以创建出格式化的输出,例如`print "username: " $1 "\t\tuid:" $3`,这将输出用户名和用户ID,并在它们之间加上标签和制表符。 随着学习的深入,awk还支持更复杂的操作,如条件...

    awk使用手册,awk使用手册

    通过本文的介绍,我们可以看到 Awk 不仅是一种强大的文本处理工具,而且具有高度可编程性,可以实现复杂的逻辑操作。对于经常需要处理大量文本数据的用户来说,掌握 Awk 的使用方法将极大地提高工作效率。随着对 Awk...

    awk学习awk学习awk学习awk学习

    **awk** 是一种强大的文本处理工具,常用于Linux/Unix系统中进行数据提取、分析及格式化工作。其名称来源于三位创建者:Alfred Aho、Brian Kernighan 和 Peter Weinberger 的名字首字母缩写。 ##### 基本命令格式:...

    awk使用手册

    通过上述介绍,我们可以看出awk是一款功能强大且灵活的文本处理工具,掌握了其基本用法和高级特性后,可以在日常工作中大大提高效率。无论是简单的数据提取还是复杂的文本处理需求,awk都能够提供有效的解决方案。

    关于awk的用法总结

    awk支持条件语句(if...else)和循环语句(for、while)。例如,`awk '{if ($1 > 10) print $0}'`会打印第一字段值大于10的行。 11. **文件操作** awk可以处理多个文件,如`awk 'script' file1 file2`。此外,还...

    AWK脚本开发教程(深入)

    AWK还支持条件判断语句(如`if`、`else`)、循环语句(如`for`)、数组和函数,使得它在处理复杂文本任务时具有很高的灵活性。 高级AWK使用包括正则表达式匹配、自定义功能以及流控制结构。例如,可以使用正则...

Global site tag (gtag.js) - Google Analytics