Linux中awk的用法
1.awk概述
AWK是一个优良的文本处理工具,它通过扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
2.格式
awk [选项参数] ‘script’ var=file(s)或
awk [选项参数] -f scriptfile var=file(s)
3.参数
-F -----指定输入文件折分隔符。默认的分隔符为空格
4.内置变量
- $0 整行
- $n 第n列
- NF 当前行有几列,逐行处理(列数)
- NR 当前行的行号(行数)
- FNR 记录当前处理行在原文本内的序号(行号)
- FS 保存或设置分隔符,FS=“:”也可以写为-F
5.运算判断
awk支持多种运算,这些运算与C语言提供的基本相同:如+、-、*、/、%等等,同时,awk也支持C语言中类似++、–、+=、-=、=+、=-之类的功能。awk同样支持关系判断
常用的==(等于)、!=(不等于)、>(大于)、>=(大于等于)、<=(小于等于)等等
[root@localhost Desktop]# awk -F: '$1~/root/{print $1}' /etc/passwd
root
仅对第一列匹配
[root@localhost Desktop]# awk -F: '$3>1000 {print $1}' /etc/passwd
nfsnobody
在/etc/passwd文件中打印出uid大于1000的用户名
6.流程控制
awk提供流程控制语句,if,while,for类似于c语言
7.实例
显示本机的ip地址
[root@localhost Desktop]# ifconfig eno16777736 |grep inet |awk '{print $2}'
192.168.230.140
fe80::20c:29ff:fed8:7834
先用ifconfig命令显示本机具体的ip信息,然后使用grep过滤ip地址所在行信息,最后用awk进行抓取指定字段。
显示最近系统登录情况
[root@localhost Desktop]# last |awk '{print $1}'
root
root
(unknown
reboot
wtmp
查看Redhat用户的bash
[root@localhost Desktop]# cat /etc/passwd |grep redhat |awk -F":" '{print $7}'
/bin/bash
这个没有使用默认的分隔符,指定为:
NF计算每行列数
[root@localhost Desktop]# cat /etc/fstab
#
cat /etc/fstab
#Created by anaconda on Mon Sep 16 22:28:05 2019
#
#Accessible filesystems, by reference, are maintained under '/dev/disk'
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=c66514ee-7005-4db4-94a6-fd2c9c27eb49 /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
[root@localhost Desktop]# awk '{print NF}' /etc/fstab
0
1
2
10
1
9
12
1
6
6
6
查看/etc/fstab的行数
[root@localhost Desktop]# awk '{print NR}' /etc/fstab
1
2
3
4
5
6
7
8
9
10
11
在某行输出前添加字段
[root@localhost Desktop]# awk -F":" '{print "hello",$1}' /etc/passwd
hello root
hello bin
hello daemon
hello adm
hello lp
hello sync
hello shutdown
hello halt
hello mail
hello operator
hello games
hello ftp
hello nobody
hello avahi-autoipd
hello dbus
hello polkitd
hello abrt
hello tss
hello unbound
hello colord
hello usbmuxd
hello libstoragemgmt