目录
📓案例1 awk通过分界符查找第几个元素或者在元素加title
一、AWK
📓AWK使用意义
awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。 awk 是三剑客的老大,利剑出鞘,必会不同凡响。
📌用法
用法形式: awk '{pattern + action}' {filenames}
其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。 awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。 通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
二、AWK实用案例
📓案例1 awk通过分界符查找第几个元素或者在元素加title
1) awk '{print $0}' /etc/passwd
2) awk -F":" '{ print $1 }' /etc/passwd
3) awk -F":" '{ print $1 $3 }' /etc/passwd
4) awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd
📓案例2 查看目标文件(100行)内第20到第30行的内容
1)awk '{if(NR>=20 && NR<=30) print $1}' /etc/passwd
📓案例3 查看目标文件中多个分界符指定元素内容
1)awk -F '[ ,]+' '{print $3" "$8}' test.txt
📓案例4 加入BIGEN和END模块统计目标文件行数
1) awk 'BEGIN {count=0;print "[start] user count is ",count} {count=count+1;print $0} END{print "[end] user count is ",count}' /etc/passwd
📓案例5 统计当前目录的文件大小之和
1) ll |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ",size}'
📓案例6 FS内置变量适应案例
FS="[[:space:]+]" 一个或多个空白空格,默认的
FS="\t" 一个或多个 Tab 分隔
FS="[" ":]+" 以一个或多个空格或:分隔
1) awk -F [" ":]+ '{print $1,$2,$3}' hello.txt
📓案例7 字段数量 NF使用
1)awk -F ":" 'NF==8{print $0}' test.txt
📓案例8 记录数量 NR使用
ifconfig eth0|awk -F [" ":]+ 'NR==2{print $4}'
📓案例9 OFS 输出字段分隔符
awk 'BEGIN{FS=":";OFS="#"}{print $1,$2,$3}' test.txt
📓案例10 取出passwd中第3列以1或2开头内容,显示这一行
awk -F: '$3 ~ /^[12]/' passwd
📓案例11 取出passwd中第3列以1或2开头内容,显示这一行
awk -F: '$3~/[0-3]$/ {print $1,$3} ' /etc/passwd
📓案例12 过滤passwd中第3列大于0小于1000内容,显示第1列和第3列
awk -F ':' '$3>0 && $3 < 1000{print $1,$3}' /etc/passwd
📓案例13 过滤passwd中第3列大于0小于1000内容,显示第1列和第3列
1)awk -F '=' 'NR==6{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0
2)awk -F= '/IPADDR/ {print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0
📓案例14 统计/etc/passwd中可登录用户数量
awk '/bash$/ {c++} END{print c}' /etc/passwd
📓案例15 统计目标文件中空行的数量
awk '/^$/ {j++} END{print j}' test.txt
📓案例16 统计日志中一共用了多少流量
awk '{sum=sum+$1} END{print sum}' liu.log
📓案例17 统计日志中一共用了多少流量