1.grep -->egrep -->文本过滤
gwak(gun awk): 支持数学运算,流控(if-else,循环,正则),本质上就是一门语言 patten or scanning and processing language
2.awk:文本截取,模式扫描和处理的语言。
3.sed :文本的替换和修改
awk命令详解
完整语法 :awk 'BEGIN{commands}pattern{commands}END{commanda}' file1
BEGIN、 END -->只执行一次
awk -F 分隔符 ‘/模式/{动作}’ 输入文件
awk的指令一定要用单引号括起
awk的动作一定要用花括号括起
模式可以是正则表达式、条件表达式或两种组合,如果模式是正则表达式要用/定界符,多个动作之间用;号分开
awk命令的操作符
正则表达式和bash一致
数学运算:+,-,*,/, %,++,- -
逻辑关系符:&&, ||, !
比较操作符:>,=,!=,<=,== ~ !~
awk 内置变量 内部引用变量不需要'$'符号
FS :当前的分隔符,默认是空白字符
OFS :当前的输出 分隔符,默认是空白字符
NR : 当前行号
NF: number of filed 一行里面有多少个字段 $NF -->取最后一个字段 倒数第二个 $NF-1
单词界定符号
\单词以feng开头
feng\> -->单词以feng 结尾
\-->查找单词feng
一、
(1)输出 /etc/passwd下第1,3,4个字段
[root@wang lianxi]# awk -F ':' '{print$1 $3 $4}' /etc/passwd
(2)指定分隔符“#”
[root@wang lianxi]# awk -F: 'OFS="#"{print $1,$3,$4}' /etc/passwd
# 注意单双引号;
(3)生成指定文件
awk -F: 'OFS="#"{print $1,$3,$4}' /etc/passwd >passwd.csv
(4) 输出拼接
awk -F: 'OFS="#"{print "username:"$1 " uid: " $3 " gid: " $4}' /etc/passwd
username:root uid:0 gid:0
(5)找出含指定bash字段
[root@wang lianxi]# awk '/bash/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
webadmin:x:1000:1000::/home/webadmin:/bin/bash
(6)找出第1,7 个字段不是 以h开头的行
[root@wang lianxi]# awk -F: '/^[^h]/{print $1,$7}' /etc/passwd
练习:
1.使用NF变量显示passwd文件倒数第二列的内容
[root@localhost ~]# cat /etc/passwd|awk -F: '{print $(NF-1)}'
2.显示passwd文件中第5到第10行的用户名
[root@localhost ~]# cat /etc/passwd|awk 'NR>=5&&NR<=10'
3.显示passwd文件中第7列不是bash的用户名
cat /etc/passwd|awk -F:'$7 !~ /bash/{print NR,$1}'
4.显示passwd文件中行号是5结尾的行号和行
cat /etc/passwd|awk -F: 'NR ~/5/ {print $0 NR}'
5.用ip add 只显示ip(不能使用tr或者cut命令)
[root@wsy lianxi]# ip add|awk -F "[ /]+" '/inet /{print $3}'
6.使用awk显示ens33的入站流量和出站流量(字节) --》ifconfig --》安装net-tools软件包
[root@localhost ~]# ifconfig| awk 'NR==5||NR==7{print $5}'
7.使用awk命令统计以r开头的用户数目
[root@wang lianxi]# cat /etc/passwd|awk -F: 'BEGIN{n=0}$1 ~/^r/{n++}END{print n}'