文档章节

awk print 学习

Zero零_度
 Zero零_度
发布于 2017/05/31 11:03
字数 1321
阅读 20
收藏 0

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

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

Awk的主要特性包含:

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

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

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

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

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

1.  Awk的语法

[java] view plain copy

  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 。后续的例子中将会用到该文件

 

 

[Java] view plain copy

  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 打印文件中的每一行

 

 

[java] view plain copy

  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打印匹配的行

 

 

[java] view plain copy

  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 也是一个内建的变量,代表该行中分割后的变量数。

[java] view plain copy

  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

 

 

[java] view plain copy

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

 

 

 

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

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

 

 

[java] view plain copy

  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 的员工

 

 

[java] view plain copy

  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 则打印出整行

 

 

[java] view plain copy

  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 。

 

 

[java] view plain copy

  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

Zero零_度
粉丝 69
博文 1262
码字总数 261544
作品 0
程序员
私信 提问
awk命令学习

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F...

北岛熊
2017/06/15
0
0
awk学习笔记

awk的工作流程: 将文件的一行读到内存,然后按分隔符将该行进行分段,其默认的分隔符是空格和TAB。 常用格式1: awk /pattern/ {command1;command2.....} file 用法1 指定分隔符 用-F'分隔符...

香胖
2015/12/04
47
0
高效awk编程第四版学习笔记

How to Run awk Programs 语法: awk 'program' input-file1 input-file2 适用于短program awk -f program-file input-file1 input-file2 用在长program awk是输入驱动的,也就是说没有输入就......

aklaus
2016/08/31
0
0
awk学习随常记录

回顾:字符串处理 数组: 数组 : declare -a index: 0- 关联数组 : declare -A 编程:数据结构和算法 字符串处理: 切片、查找替换、查找删除、变量赋值 GUN awk: 文本处理三工具: grep ,...

朋友好运
2017/05/16
0
0
linux中awk学习小结

awk与sed本身都是一个完整的编程语言,可以用来方便的处理文本,awk处理列。 awk正常的结构: cat tmp.txt | awk 'BEGIN{}{}END{}' --带有表头,带有中间的处理过程,带有结尾-- 常用用法:cat...

00_yatou
2015/02/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

未来,哪些技术在前端开发的地位会越来越高?

转眼2019也快走到下半年,过去的这段时间里,不论是互联网巨头还是初创企业,都纷纷进行了一波优化。渐趋理智的资本淘汰了一批不能适应市场的业务,而业务的紧缩也淘汰了一批不能适应市场的程...

智云编程
37分钟前
0
0
Golang math基本数学函数

三角函数 正弦函数,反正弦函数,双曲正弦,反双曲正弦 func Sin(x float64) float64 func Asin(x float64) float64 func Sinh(x float64) float64 func Asinh(x float64) float64 一次性返回......

Sunki
39分钟前
0
0
SpringBoot系列教程JPA之新增记录使用姿势

SpringBoot系列教程JPA之新增记录使用姿势 上一篇文章介绍了如何快速的搭建一个JPA的项目环境,并给出了一个简单的演示demo,接下来我们开始业务教程,也就是我们常说的CURD,接下来进入第一...

小灰灰Blog
今天
7
0
大话文本检测经典模型:Pixel-Anchor

文本检测是深度学习中一项非常重要的应用,在前面的文章中已经介绍过了很多文本检测的方法,包括CTPN(详见文章:大话文本检测经典模型CTPN)、SegLink(详见文章:大话文本检测经典模型Seg...

雪饼
今天
2
0
手把手教你写一个RPC

1.1 RPC 是什么 定义:RPC(Remote Procedure Call Protocol)——远程过程调用协议 ,RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC...

我最喜欢三大框架
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部