awk的基本应用
- 一、awk的工作原理
- 二、实际应用
- 按行输出文本
- 按字段输出文本
- 时间的使用
- 查看各个功能
一、awk的工作原理
awk与sed和grep共成为文本三剑客,都是针对文本非常实用的工具。
awk的工作原理:
遂行读取文本,默认以空格或者tab(制表符)键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是遂行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示"与"、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
其命令格式为:
awk 选项 ‘模式或条件{操作}’ 文件1 文件2 .。。。
awk -f 脚本文件 文件1 文件2
awk常见的内建变量(可直接用)如下所示:
FS:列分隔符。指定每行文本的字段分隔符,默认为空格或制表位。与“-F”作用相同
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)。
FILENAME:被处理的文件名。
RS:行分隔符。awk从文件上读取资料时,将根据RS的定义吧资料切割成许多条记录,而awk一次仅读取一条记录,以进行处理。预设值是‘\n’
二、实际应用
按行输出文本
按字段输出文本
时间的使用
查看各个功能
BEGIN中的命令只执行一次,awk数组的下标除了可以使用数字,也可以使用字符串,但是字符串必须加双引号
-v:设置变量
<<<:表示将后面的内容作为前面命令的标准输入
awk’1’:就算awk‘1{print}’,允许打印读入的行内容
awk’0’:就算awk‘0{print}’,不允许打印读入的行内容
var++的形式:先读取var的变量值,再对var值+1
awk 处理第一行时:先读取 a[$1] 值再自增,a[$1] 即 a[1] 值为空(即0),即为 awk ‘!0’,即为 awk ‘1’,即为 awk’1{print}’
awk 处理第二行时:先读取 a[$1] 值再自增,a[$1] 即 a[1] 值为 1,即为 awk ‘!1’,即为 awk ‘0’,即为 awk ‘0{print}’
ip=ifconfig ens33 | awk '/inet /{print $2}'
echo “本地IP地址是:”$ip
cpu=uptime | awk '{print $NF}'
#awk中NF为当前行的列数,
N
F
是最后一列
e
c
h
o
"
本机
C
P
U
最近
15
分钟的负载是
:
"
NF是最后一列 echo "本机CPU最近15分钟的负载是:"
NF是最后一列echo"本机CPU最近15分钟的负载是:"cpu
net_in=ifconfig ens33 | awk '/RX p/{print $5}'
echo “入站网卡流量为:”$net_in
net_out=ifconfig ens33 | awk '/TX p/{print $5}'
echo “出站网卡流量为:”$net_out
mem=free -m | awk '/^Mem/{print $4)'
echo “内存剩余容量为:”$mem
disk=df -h | awk '/sda1/{print $4}'
echo "根分区剩余容量为:"
d
i
s
k
u
s
e
r
=
‘
c
a
t
/
e
t
c
/
p
a
s
s
w
d
∣
w
c
−
l
‘
e
c
h
o
"
本地账户数量为
:
"
disk user=`cat /etc/passwd |wc -l` echo "本地账户数量为:"
diskuser=‘cat/etc/passwd∣wc−l‘echo"本地账户数量为:"user
login=who | wc -l
echo "当前登陆计算机的账户数量为:"
l
o
g
i
n
p
r
o
c
e
s
s
=
‘
p
s
a
u
x
∣
w
c
−
l
‘
e
c
h
o
"
当前计算机启动的进程数量为
:
"
login process=`ps aux | wc -l` echo "当前计算机启动的进程数量为:"
loginprocess=‘psaux∣wc−l‘echo"当前计算机启动的进程数量为:"process
soft=rpm -qa | wc -l
echo “当前计算机已安装的软件数量为:”$soft