shellLinux学习与应用技巧

【现学现忘&Shell编程】— 32.AWK编程之AWK的基本使

2020-10-20  本文已影响0人  繁华似锦Fighting

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
上一篇下一篇

猜你喜欢

热点阅读