『现学现忘』Shell编程 — 26、AWK编程(二)AWK的基本使用

1、AWK命令说明

[root@localhost ~]# awk '条件1{动作1} 条件2{动作2} ...' 文件名

条件(Pattern):
  一般使用关系表达式作为条件。这些关系表达式非常多,具体看下面一点。
  简单举例:
    x>10:判断变量x是否大于10。
    x==y:判断变量x是否等于变量y 。
    A~B:判断字符串A中是否包含能匹配B表达式的子字符串。
    A!~B:判断字符串A中是否不包含能匹配B表达式的子字符串。
  
动作(Action):
  格式化输出。
  流程控制语句。

提示:先判断条件是否成立,在进行对应动作。可以没有条件直接写动作,如果没有条件,则直接执行动作。

2、AWK命令使用

(1)基本使用

使用如下文本

ID      Name    Python  Linux   MySQL   Java
1       Tangs   88      87      86      85.55   
2       Sunwk   99      98      97      96,66   
3       Zhubj   77      76      75      74.44   
4       Shahs   66      65      64      63.33 

执行命令:awk '{printf $2 "\t" $3 "\t" $6 "\t" "\n"}' student.txt

结果:

[root@localhost tmp]# awk '{printf $2 "\t" $3 "\t" $6 "\t" "\n"}' student.txt 
Name	Python	Java	
Tangs	88		85.55	
Sunwk	99		96.66	
Zhubj	77		74.44	
Shahs	66		63.33	

说明

  • AWK的动作条件是需要用单引号括起来的,所以在动作条件中的printf命令中定义的输出格式时,单引号就需要改换成双引号了,这里要注意。
  • 没有条件就是每一行都处理。
  • AWK的主要动作就是用printf命令来输出的。
  • AWK中可以直接添加文本文件,来获取文件中所需内容。

这里在补充一下print命令和printf命令用法差不多,print命令自带换行符,但是Linux系统不支持print命令。

# 使用`print`命令就不需要加上\n换行符了。
[root@localhost tmp]# awk '{print $2 "\t" $3 "\t" $6 "\t"}' student.txt 
Name	Python	Java	
Tangs	88		85.55	
Sunwk	99		96.66	
Zhubj	77		74.44	
Shahs	66		63.33	
(2)处理分隔符是空格的情况

看磁盘情况的df命令的结果中,数据之间的分隔符是空格,用cut命令是处理不了的。

如下:

# 查看磁盘情况
[root@localhost tmp]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  2.1G   16G  12% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       240M   34M  194M  15% /boot

# 获取第二列信息
[root@localhost tmp]# df -h | cut -f 2
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  2.1G   16G  12% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       240M   34M  194M  15% /boot

使用awk解决需求,获取磁盘情况的第1列和第5列的信息

[root@localhost tmp]# df -h | awk '{printf $1 "\t" $5 "\t" "\n"}'
Filesystem	Use%	
/dev/sda3	12%	
tmpfs		0%	
/dev/sda1	15%	
(3)综合练习

获取下面信息中根分区的占有率12。

[root@localhost tmp]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  2.1G   16G  12% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       240M   34M  194M  15% /boot

执行命令:

[root@localhost tmp]# df -h | grep "dev/sda3" | awk '{print $5}' | cut -d "%" -f 1
12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值