Shell学习15天(文本处理AWK工作原理概览)- 10day

(一) 什么是AWK?

AWK是一个优良的文本处理工具,LinuxUnix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk

最简单地说, AWK 是一种用于处理文本的编程语言工具。AWK 在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法。它的设计思想来源于 SNOBOL4 、sed 、Marc Rochkind设计的有效性语言、语言工具 yacc 和 lex ,当然还从 C 语言中获取了一些优秀的思想。在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。

(二) AWK使用方式

尽管操作可能会很复杂,但命令的语法始终是:

awk  [options]  'commands'   filenames

awk  [options]  -f  awk-script-file  filenames

或:

awk '{pattern + action}' 或者 awk 'pattern {action}'

 

= = options:

-F     定义输入字段分隔符,默认的分割符是空格或制表符

== command(可以是模式,也可以是动作,也可以是模式+动作;;其中模式可以是正则也可以是条件测试还可以是其它)

BEGIN{}                                                                          {}                      END{}

行处理前(第一行处理前,不是每一行。)          行处理               行处理后(所有行处理后不是一行处理后)

在行处理之前定义输入分割符FS:

OFS是 out FS ,输出分割符:

OFS和FS是awk的内置变量

command中模式详解:

范围模式是从哪到哪,从Tom到Suzanne  这个范围

 

(三) AWK的一些简单用法

 

 

1.  awk  'pattern'   filename  如  awk   '/root/'    passwd    模式   ###没有指定动作相当于匹配查找,把汉root的行打印在屏幕上。

2.  awk  '{action}'   filename         如  awk  -F:  '{print $1} '    passwd     动作  ### 打印:分割的第一列

3.  awk  'pattern  {action}'    filename    如 awk -F: ‘/root/  {print $1,$3}’  passwd  模式+动作   ##打印含root行的以:分割的第一第三列

4.  command | awk 'pattern {action}'  filename  如 df -P |grep '/' |awk '$4>250{print $4}'  管道  ##第四列大于250 打印第四列

 

(四) awk 工作原理解析:

输出变量的逗号都会映射成OFS的值,就算自己指定了OFS,也用逗号分割你的多个变量输出格式。

 

 

(五)  AWK 内置变量  man awk

NF 是这一行字段数,$NF是字段第NF个字段:

(六)  AWK的格式化输出

[hujianmei@localhost days_10]$ date | awk '{print "Month:" $2 "\nYear:" $NF}'
Month:02月
Year:CST
[hujianmei@localhost days_10]$ awk -F: '{print "username is:" $1 "\t uid is: " $3}' passwd 
username is:##root	 uid is: 0
username is:#bin	 uid is: 1
username is:##daemon	 uid is: 2
username is:adm	 uid is: 3
username is:lp	 uid is: 4
username is:sync	 uid is: 5
username is:shutdown	 uid is: 6
username is:halt	 uid is: 7
username is:mail	 uid is: 8
username is:operator	 uid is: 11
[hujianmei@localhost days_10]$ awk -F: '{printf "%-15s %-10s %-15s\n",$1,$2,$3}' passwd
##root          x          0              
#bin            x          1              
##daemon        x          2              
adm             x          3              
lp              x          4              
sync            x          5              
shutdown        x          6              
halt            x          7              
mail            x          8              
operator        x          11             
[hujianmei@localhost days_10]$ awk -F: '{printf "|%-15s |%-10s |%-15s\n",$1,$2,$3}' passwd
|##root          |x          |0              
|#bin            |x          |1              
|##daemon        |x          |2              
|adm             |x          |3              
|lp              |x          |4              
|sync            |x          |5              
|shutdown        |x          |6              
|halt            |x          |7              
|mail            |x          |8              
|operator        |x          |11             
[hujianmei@localhost days_10]$ 

 

 

 

 

20200221

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值