嵌入式 shell里awk_print的用法

原创 2013年12月02日 14:53:34

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

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

Awk的主要特性包含:

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

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

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

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

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

1. Awk的语法

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

在上诉语法中:

1. searchpattern是正则表达式

2. Actions输出的语法

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

4. file输入文件名

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

 

2.Awk的工作方式:

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

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

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

4)在上诉的语法中, SearchPattern 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. BEGIN { Actions}
  3. {ACTION} # Action foreveryline in a file
  4. END { Actions }
  5. # 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 "ReportGenerated/n--------------";
  4. > }' employee.txt
  5. Name Designation DepartmentSalary
  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部门的人数

相关文章推荐

shell awk用法详解

awk 也是一个非常棒的数据处理工具!sed 常常用于一整个行的处理, awk 则比较倾向于一行当中分成数个『栏位』(或者称为一个域,也就是一列)来处理。因此,awk 相当的适合处理小型的数据数据处理...

shell awk 用法总结

关于NR和FNR的典型应用: 现在有两个文件格式如下: #cat account 张三|000001 李四|000002 #cat cdr 000001|10 000001|20...

嵌入式 shell脚本赋值的5种方法

1. Shell中的变量类型 Shell中的变量可以分为环境变量、位置变量、预定义的特殊变量以及用户自定义变量、 2. 环境变量 Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:56
  • 515

Shell脚本实现动态配置IP与路由:解决嵌入式Android/Linux有线和无线网卡双网共存问题

Shell脚本实现动态配置IP与路由:解决嵌入式Android/Linux有线和无线网卡双网共存问题 网络环境及问题再现 命令行方式实现双网共存 Shell脚本自动实现双网共存(根据网络环境动态配置I...

嵌入式 变量在shell脚本间的传递

实现shell脚本中的变量传递 前几篇文章中已经介绍过局部变量和环境变量的含义,接下来我们来拓展下,看看变量怎样实现在shell脚本 中的传递shell脚本其实是用当前shell的子shell去执行的...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:41
  • 397

嵌入式数据库sqlite3的用法(转载)

系统平台:ubuntu10.04 简介 sqlite3一款主要用于嵌入式的轻量级数据库,本文旨在为熟悉sqlite3基本命令提供技术文档。      备注:本文所有操作均在root用户下进行...

嵌入式 shell脚本的特殊符号的意义

shell字符串比较、判断是否为数字         二元比较操作符,比较变量或者比较数字。注意数字与字符串的区别。         整数比较         -eq       等于,如:if [ ...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:40
  • 496

嵌入式学习3(Linux常用shell命令下)

4、用户和组群管理 注:普通用户都在/home目录下         root在/root目录下 用户 Ø  who am i:查看当前用户 Ø  who:查看当前有多少用户在使用资源 Ø...

星云测试发布针对开放式Linux操作系统的嵌入式精准测试平台Shell

星云测试发布针对开放式Linux操作系统的嵌入式精准测试平台Shell  如今,嵌入式系统被广泛引用于国防、航天、金融、通信等重要领域,随着物联网、智能硬件、机器人以及智能移动设备在各行业、家庭的快速...

嵌入式 shell用一行命令统计一文本文件中包含指定字符串出现次数

打印指定行: sed -n “1,2p”文件名· $grep -c 'I am tom' a.txt   参考资料:   grep、fgrep和egrep命令     这组命令以指定模式搜索文件,...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:41
  • 1639
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 shell里awk_print的用法
举报原因:
原因补充:

(最多只允许输入30个字)