Linux三剑客命令之awk

Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

终端输入awk --help可以看到所有的语法参数,翻译了部分,举例一些常用的实例 

一、命令选项

1、-F     指定输入文件折分隔符,如-F:。

2、-v     赋值一个用户定义变量。

3、-f     从脚本文件中读取awk命令。

二、awk内置变量

awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FS                保存或设置字段分隔符,例如FS= ":" 与-F功能一样
RS:           Record Separator,记录分隔符
ORS:        Output Record Separate,输出当前记录分隔符(行分隔符)
OFS            Out of Field Separator,输出字段分隔符物,其中解释了缩写的含义
$n               指定分隔的第n个字段,如 $1、$2分别表示文本的第1列、第2列依此类推
$0                文本当前行的全部内容
NR              文件当前行的行号
NF              文件当前行的列数(有几列)

三、关键调用参数

$0           表示整个当前行
$1           每行第一个字段
\t            制表符tab
\n           换行符
FS          BEGIN时定义分隔符
RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~            匹配,与==相比不是精确比较
!~           不匹配,不精确比较
==         等于,必须全部相等,精确比较
!=           不等于,精确比较
&&      逻辑与
||             逻辑或
+            匹配时表示1个或1个以上
/[0-9][0-9]+/   两个或两个以上数字
/[0-9][0-9]*/    一个或一个以上数字
FILENAME  文件名
OFS            输出字段分隔符, 默认也是空格,可以改为制表符等
ORS            输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]'       定义三个分隔符

比较符号:==(等于) !=(不等于) >(大于)>=(大于等于) <(小于) <=(小于等于)

四、常用实例分析,以下实例只是常用,广泛应用需要配合其他运维工具

1、最常用实例,查看系统中的用户,-F以":"为分隔符,打印第一列

[root@master service]# awk -F ":" '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp

2、搜索/etc/passwd有root关键字的所有行

[root@master service]# awk -F: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

3、显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割,\t可以改成其他标识符

[root@master ~]# awk  -F ':'  '{print $1"\t"$7}' passwd
root    /bin/bash
bin    /sbin/nologin
daemon    /sbin/nologin
adm    /sbin/nologin
lp    /sbin/nologin
sync    /bin/sync
shutdown    /sbin/shutdown
halt    /sbin/halt
mail    /sbin/nologin

4、筛选服务器IP地址

[root@master ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.252  netmask 255.255.0.0  broadcast 192.168.255.255
        inet6 fe80::736e:388a:4dfe:5d00  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ec:ce:09  txqueuelen 1000  (Ethernet)
        RX packets 6857322  bytes 1682683150 (1.5 GiB)
        RX errors 0  dropped 154  overruns 0  frame 0
        TX packets 6510893  bytes 5868937321 (5.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@master ~]# ifconfig ens33 | grep netmask | awk '{print $2}'
192.168.2.252

5、提取根的空间使用率,常用于自动清理磁盘的脚本

[root@master ~]# df -h /
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   53G   21G   30G   42% /
[root@master ~]# df -h / | awk '/\/$/{print $5}'
42%

 6、打印passwd前4列内容

[root@master ~]# awk -F: '{NF=4}1' /etc/passwd
root x 0 0
bin x 1 1
daemon x 2 2
adm x 3 4
lp x 4 7
sync x 5 0
shutdown x 6 0

7、 输出其中以nologin结尾的完整记录:

[root@master ~]# awk -F: '/nologin$/{print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

8、打印passwd第三行内容

[root@master ~]# awk -F:  'NR==3{print}'  /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin

9、输出其中登录Shell不以nologin结尾(对第7个字段做!~反向匹配)的用户名、登录Shell信息

!~    不匹配

[root@master ~]# awk -F: '$7!~/nologin$/{print $1,$3}' passwd 
root 0
sync 5
shutdown 6

10、输出账户UID小于5的账户名称和UID信息

[root@master ~]# awk -F: '$3<5{print $1,$3}' passwd 
root 0
bin 1
daemon 2
adm 3
lp 4

11、输出账户UID大于10并且小于20的账户信息,&&与,||或

[root@master ~]# awk -F: '$3>1000 && $3<2000{print $1,$3}' passwd 
ceshi 1001
jenkins 1002
first_yunwei 1003

12、打印开头包含root打印出第一行和最后一行,$NF默认是最后一行

[root@master ~]# awk -F: '/^root/{print $1,$NF}' /etc/passwd
root /bin/bash

12、输出字段1,3,6,以制表符作为分隔符

[root@master ~]# awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd  

root    0    /root
daemon    1    /usr/sbin
bin    2    /bin

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三颗草丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值