awk 使用举例
awk基本用法
awk '{print $1 $2 $3 }' 文件名 # 代表打印出第一列,第二列,第三列
-F 指定分割符
awk -F: '{print $1}' 文件名 # 以:分隔 打印第一列
awk '{print}' txt //输出文档所有内容
awk '{print $1}' txt //输出文档每行第1列,默认用空格做分隔符
awk '{print $1 $3}' txt //输出文档每行第1列,第3列
head -1 /etc/passwd > txt2 //准备新素材
awk '{print $2}' txt2 //输出第2列,无显示,没有空格做默认分隔符,当前文档一整行算一列
awk -F: '{print $5}' txt2 //使用:做分隔符,显示第5列
awk -F: '{print $7}' txt2 //使用:做分隔符,显示第5列
awk内置变量
$1 $2 $3 ..... NR行 NF列
awk -F[:/] '{print $9}' txt2 //使用多个分隔符后显示第9列
awk -F[:/] '{print NF}' txt2 //显示有几列
awk -F[:/] '{print NR}' txt2 //显示第几行
awk -F[:/] '{print NR NF}' txt2 //都显示,看不清
awk -F[:/] '{print NR,NF}' txt2 //加逗号有空格效果
awk -F[:/] '{print NR" "NF}' txt2 //或把空格引起来
awk -F[:/] '{print "当前行有"NF"列"}' txt2 //常量配合变量输出
awk -F[:/] '{print "当前行有NF列"}' txt2 //变量不能在双引号内,否则变常量输出
ifconfig eth0 |awk '/RX p/{print "当前网卡接收的流量是"$5"字节"}'
ifconfig eth0 |awk '/TX p/{print "当前网卡发送的流量是"$5"字节"}'
df -h | awk '/vda1/{print "磁盘可用空间是"$4}'
awk '/Failed/{print $11}' /var/log/secure //在安全日志中查找访问本机失败的ip地址记录
awk 高级用法
awk流程控制:
BEGIN任务 执行1次
逐行任务 执行多次,与文本有关
END任务 执行1次
awk [选项] ' BEGIN{指令} {指令} END{指令}' 文件
awk -F: 'BEGIN{print "user\tUID\tHOME"} {print $1"\t"$3"\t"$6} END{print "总计",NR,"行"}' 文件 txt3 //按需求的格式输出文档内容,有表头,有结尾统计
awk处理条件
**正则**
awk -F: '$1~/root/' /etc/passwd // ~ 包含
awk -F: '$7!~/nologin$/{print $1,$7}' /etc/passwd // !~不包含
**使用数值/字符串毕竟设置条件**
比较符号: ==、!=、>、>=、<、<=
awk -F: 'NR==3{print}' txt3 // 输出第3行
awk -F: '$3==0' txt3 // 输出第三列为0的行
awk -F: '$1==root' txt3 // 无效用法
awk -F: '$1=="root"' txt3 // 有效用法(由于其是字符串)
**使用逻辑符号&& ||**
awk -F: '$3<=10 || $3>1000' /etc/passwd //找小于等于10的或者大于1000的
awk -F: '$3>10 || $3<1000' /etc/passwd //找大于10并且小于1000的
**数学运算**
awk 'BEGIN{x++;print x}'
awk 'BEGIN{e=8;e++;print e}'
awk 'BEGIN{e=0;e--;print e}'
awk 'BEGIN{a=2+3;print a}'
awk 'BEGIN{print 2+3}'
awk 'BEGIN{print 2*3}'
awk 'BEGIN{print 2%3}'
seq 20 | awk '$1%3==0' // 20以内3的整数倍
详情可以参考该文档awk命令详解
所有的事都会过去,我们所有的人都是从小白开始,坚持下去。