shell脚本-awk使用
2017-11-13 19:33
477 查看
shell脚本之awk使用
问题:什么是AWK?有什么用?怎么用?
解答
AWK是3个创始人的名字首写缩写,用于文本日志处理等的命令.应用于后台日志处理
使用
#!bin/bash ##awk Test #1.处理文本数据 #awk中的默认字段分隔符是任意的空白字符(例如空格或制表符), #如果想要读取使用其他字段分隔符的文件,可以使用-F 选项指定, #下面用于指定:冒号 awk -F: '{print $1 $7}' /etc/passwd awk -F: '{print $1 " home is "$7}' /etc/passwd #result:root home is /bin/bash
#将脚本存到文件里 vi script #2.script里面的内容 { print $1 " home is "$7 } #执行script内容,这里的script是一个文件,需要使用-f参数指定 awk -F: -f script /etc/passwd #BEGIN:有时可能需要在处理数据前运行脚本,比如为报告创建开头部分 #script里面的内容 BEGIN{ #为表头 print "this is start" } { print $1 " home is "$7 } END{ print "this is end" #可以是表尾,生成汇总总结 } #内置变量 #script内容 BEGIN{ #为表头 print "this is start" #输入时指定字段的行分隔符,执行时可以不指定-F : 直接执行awk -f script /etc/passwd FS=":" #输入行分隔符,回车换行 RS="\n" #Output Field Seperator,指定默认输出分割字段 OFS=":" #Output Row Seperator,输出时行分隔符 ORS="," #Number of Field字段数 NF: #Number of 行Record数,所有文本总行,只能在END里面用 NR: } { print $1 " home is "$7 } END{ #awk -f script /etc/passwd /etc/passwd统计两个文本内容 print "this is end,total lines is:"NR #可以是表尾,生成汇总总结 }
#awk中匹配操作符以及比较 #正则表达式需要放在/expr/中,/expr/在他要控制的程序脚本分左花括号前 awk '/110.52.250.126/ {print $1}' access_2013_05_30.log #匹配到就会打印第一行出来 #~波浪线表示匹配的意思,因为日志文件中第一行$1是IP awk '($1 ~ /110.52.250.126/) {print $7}' access_2013_05_30.log #不满足/110.52.250.126/IP的就打印第七行 awk '($1! ~ /110.52.250.126/) {print $7}' access_2013_05_30.log
实例:分析互联网日志
vi apache_log_script #匹配pv和uv,过滤一些不要的css,gif #>重定向操作符&&还需要状态码等于200 首先过滤掉一些干扰数据,一些请求图片、js、css的 使用模式匹配进行过滤,默认使用空格分割之后带有url的是第7列(注意:.在模式中需要转义) 把原始数据中的资源请求地址和状态吗不是200的都过滤掉,保存到一个新的文件。 awk '($7 !~ /\.jpg|\.png|\.css|\.gif|\.js/ && $9~200){print $0}' access_2013_05_30.log > clean_2013_05_30.log #统计PV、uv ##PV #初始化变量pv=0 awk 'BEGIN{pv=0} {pv++} END{print "pv:" pv}' clean_2013_05_30.log #方式2 awk 'END{print "pv:"NR}' clean_2013_05_30.log #方式3WordCount awk '{print $0}' clean_2013_05_30.log |wc -l ##UV #可以放到shell脚本里面每天自动执行 #uv统计不重复的IP,先排序,去重,可以通过MAC地址统计内网的同一个IP的 # 注意:需要先排序再去重 这样才正确。否则uniq去重只会把挨着相等的去掉。 awk '{print $1}' clean_2013_05_30.log | sort -n | uniq -u |wc -l #统计哪个用户访问次数(IP出现次数最多的)-c过滤后统计-k第一列,head 5前五名(可以统计一天访问多少次,再加以控制) awk '{print $1}' clean_2013_05_30.log | sort -n |uniq -c |sort -nr -k 1|head -5
#sed去除第一列 sed -e 's/^.//g' dump_autotest.txt
相关文章推荐
- Shell脚本------解析elf文件及awk基本使用
- Shell脚本编程与sed,awk工具的使用--9月15日课程作业
- 脚本使用(awk,shell...)
- 使用shell脚本ssh远程执行命令,使用awk时总是报错
- shell脚本--cut命令与awk简单使用
- shell脚本之使用sed和awk进行文本处理
- shell脚本--使用for if date awk
- shell脚本之awk的简单使用
- Shell脚本------解析elf文件及awk基本使用
- 【Shell脚本】awk中如何使用shell的环境变量
- 采用Shell及AWK脚本实现磁盘使用空间监控
- 在Shell脚本中编写AWK脚本实现数据提取—注意格式、awk中使用shell变量、awk中数字字符串转换成数字、awk中字符串相等比较
- 使用 shell 脚本对 Linux 系统和进程资源进行监控
- shell脚本中head命令的使用
- Mac 上使用 Shell 脚本 + adb shell 实现简单的 Android 模拟点击自动化测试
- 使用shell脚本新增20个用户密码为随机5个字符
- Shell脚本之awk
- 使用Shell脚本对Linux系统和进程资源进行监控
- shell脚本中使用ftp进行文件的上传
- Linux中使用shell脚本向文件中写数据