awk的格式
awk ’条件类型1{动作1}条件类型2{动作2}‘ filename
awk后面接两个单引号并加上大括号来设定对数据的处理动作。
awk的使用举例
wuze@wuze-virtual-machine:~/c++_project/01/001$ last -n 5
wuze tty2 tty2 Fri Sep 23 12:40 still logged in
reboot system boot 5.15.0-48-generi Fri Sep 23 12:38 still running
wuze tty2 tty2 Thu Sep 22 12:52 - down (09:51)
wuze tty2 tty2 Thu Sep 22 12:48 - 12:52 (00:03)
wuze pts/1 192.168.32.1 Tue Sep 20 21:24 - 21:47 (00:22)
wtmp begins Tue Sep 20 19:50:36 2022
执行命令
wuze@wuze-virtual-machine:~/c++_project/01/001$ last -n 5 | awk '{print $1 $3}'
wuzetty2
rebootboot
wuzetty2
wuzetty2
wuze192.168.32.1
wtmpTue
# 默认情况下是换行打印的 其中$1表示第一列 $3表示第三列
wuze@wuze-virtual-machine:~/c++_project/01/001$ last -n 5 | awk '{print $1 "\t" $3}'
wuze tty2
reboot boot
wuze tty2
wuze tty2
wuze 192.168.32.1
wtmp Tue
# 这里要注意的是‘’会优先匹配‘’ 所以在嵌套时 最好注意一下
awk处理行的操作:
NR 处理的哪一行
NF 这一行有多少数据
逻辑运算字符:
< = >= <= == !=
wuze@wuze-virtual-machine:~/c++_project/01/001$ last -n 3 | awk '{print $1"\tline:"NR"\tcol:"NF}'
wuze line:1 col:10
reboot line:2 col:10
wuze line:3 col:10
line:4 col:0
wtmp line:5 col:7
# 注意这里引号容易打乱 命令用’‘ 字符串用“”
可以用逻辑运算字符,来断定执行某行的操作
wuze@wuze-virtual-machine:~/c++_project/01/001$ last -n 3 | awk 'NR==1{print $1 "\taaa"}\
> NR!=1{print $2 "\tbbb"}
>
> '
wuze aaa
system bbb
tty2 bbb
bbb
begins bbb
# 当行数为1时打印第一列的第一行和aaa
当行数不为1时打印第二列其他行和bbb
uze@wuze-virtual-machine:~/c++_project/01/001$ last -n 3
wuze tty2 tty2 Fri Sep 23 12:40 still logged in
reboot system boot 5.15.0-48-generi Fri Sep 23 12:38 still running
wuze tty2 tty2 Thu Sep 22 12:52 - down (09:51)
wtmp begins Tue Sep 20 19:50:36 2022