41.每日一个Linux命令 ----awk

描述:强大的文本分析工具,按行处理。正则表达式

用法:awk '/search pattern1/ {Actions}shell

                   /search pattern2/ {Actions}' file数组

1.search pattern正则表达式 布尔值函数

2.Actions 输出的语法工具

3.单引号的做用防止shell截断spa

工做方式:命令行

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

2)对于一行,按照给定的正则表达式的顺序进行匹配,若是匹配则执行对应的 Action字符串

3)若是没有匹配上则不执行任何动做io

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

5)若是 Search Pattern 未提供,则对全部的输入行执行 Action 操做

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

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

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

内建变量

变量 描述
\$n 当前记录的第n个字段,字段间由FS分隔
\$0 完整的输入记录
ARGC 命令行参数的数目
ARGIND 命令行中当前文件的位置(从0开始算)
ARGV 包含命令行参数的数组
CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO 最后一个系统错误的描述
FIELDWIDTHS 字段宽度列表(用空格键分隔)
FILENAME 当前文件名
FNR 同NR,但相对于当前文件
FS 字段分隔符(默认是任何空格)
IGNORECASE 若是为真,则进行忽略大小写的匹配
NF 当前记录中的字段数
NR 当前记录数
OFMT 数字的输出格式(默认值是%.6g)
OFS 输出字段分隔符(默认值是一个空格)
ORS 输出记录分隔符(默认值是一个换行符)
RLENGTH 由match函数所匹配的字符串的长度
RS 记录分隔符(默认是一个换行符)
RSTART 由match函数所匹配的字符串的第一个位置
SUBSEP 数组下标分隔符(默认值是/034)

示例:

[root@share19 ~]# 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

awk 默认

[root@share19 ~]# 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

awk 打印匹配的行

[root@share19 ~]# awk '/Thomas/
> /Nisha/' employee.txt
100  Thomas  Manager    Sales       $5,000    
400  Nisha   Manager    Marketing   $9,500

打印指定域

[root@share19 ~]# awk '{print $2,$5}' employee.txt 
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,00
[root@share19 ~]# awk '{print $2,$NF}' employee.txt 
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

awk 开始结束动做

BEGIN { Actions}    
{ACTION} # Action for everyline in a file    
END { Actions }
[root@share19 ~]# awk 'BEGIN {print "NAME/tDesignation/tDepartment/tSalary"}
{print $2,"\t",$3,"\t",$4,"\t",$NF}
END {print "Report Generated\n--------------------"}' employee.txt 
NAME/tDesignation/tDepartment/tSalary
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
--------------------

找出ID>200的员工

[root@share19 ~]# awk '$1>200' employee.txt 
300  Sanjay  Sysadmin   Technology  $7,000    
400  Nisha   Manager    Marketing   $9,500    
500  Randy   DBA        Technology  $6,000

打印技术部员工

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

打印技术部的员工数

[root@share19 ~]# awk 'BEGIN {count = 0}
> $4 ~ /Technology/ {count = count +1} 
> END {print "Number of employee in Technology Dept",count}' employee.txt
Number of employee in Technology Dept 3
相关文章
相关标签/搜索