建筑素材网站,com域名申请,阜阳建设部网站,绵阳网站seoawk概述awk是一种编程语言#xff0c;用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件#xff0c;或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能#xff0c;是linux/unix下的一个强大编程工具。它在命令行中使用#…awk概述awk是一种编程语言用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能是linux/unix下的一个强大编程工具。它在命令行中使用但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的它逐行扫描文件从第一行到最后一行寻找匹配的特定模式的行并在这些行上进行你想要的操作。如果没有指定处理动作则把匹配的行显示到标准输出(屏幕)如果没有指定模式则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本它提供了Bell实验室和GNU的一些扩展。下面介绍的awk是以GUN的gawk为例的在linux系统中已把awk链接到gawk所以下面全部以awk进行介绍。使用语法awk [ -F Ere ] [ -v Assignment ] … { -f ProgramFile | Program } [ [ File … | Assignment … ] ] …常用命令选项-F fs or --field-separator fs指定输入文件折分隔符fs是一个字符串或者是一个正则表达式如-F:。-v varvalue or --asign varvalue赋值一个用户定义变量。-f scripfile or --file scriptfile从脚本文件中读取awk命令。相关输出命令print item1,item2,…要点:逗号作为item的分隔符输出的item可是字符串,也可以是数值:当前记录的字段、变量或awk的表达式如省略item,相当于print $0printf FORMAT,item1,item2,….要点:FORMAT是必须要给出的不会自动换行,需要显示给出换行控制符 \nFORMAT中需要分别为后面的每个item指定一个格式化符号相关格式符格式符描述%c显示字符的ASCII码%d,%i显示十进制整数%e,%E科学计数法数值显示%f显示为浮点数%g,%G以科学计数法或浮点形式显示数值%s显示字符串%u无符号整数%%显示%自身相关修饰符修饰符描述m[.n]m表示控制显示的宽度,默认右对齐;n表示小数点后的精度–左对齐显示数值的符号相关内建变量变量名描述FSinput field seperator ,指定输入分隔符,默认为空白字符OFSoutput field seperator,指定输出分隔符,默认为空白字符RSinput record seperator,指定输入行分隔符ORSoutput record seperator,指定输出行分隔符NFnumber of field,字段数量{print NF}打印统计的字段数量{print $NF}打印每行的最后一字段NRnumber of record,行数FNR多文件统计,各文件分别计数,显示行数FILENAME当前文件名ARGC命令行参数的个数ARGV命令行中给定的各参数相关内置函数函数表达式描述rand()返回0-1之间的随机数,小数length([$])返回指定字符串的长度sub(r,s,[t])以r表示的模式来查找t所表示的字符串中的匹配的内容,并将其第一次出现替换为s所表示的内容gsub(r,s,[t])以r表示的模式来查找t所表示的字符串中的匹配的内容,并将其所有出现全部替换为s所表示的内容split(s,a[,r])以r为分隔符切割字符s,并将切割后的结果保存在a所表示的数组中相关操作符运算符描述 - * / % ^ **赋值?:C条件表达式||逻辑或逻辑与~匹配正则表达式~!不匹配正则表达式 ! 关系运算符空格连接 –加减* / 乘除与求余 – !一元加减和逻辑非^ ***求幂 –增加或减少作为前缀或后缀$字段引用in数组成员相关模式模式描述empty空模式,匹配每一行BEGIN{}仅在开始处理文件中的文本之前执行一次END{}仅在文本处理完成之后执行一次/regular expression/仅处理能够被此处模式匹配到的行relational expression关系表达式,结果有真有假,结果为真才会被处理,真:结果为非0值,非空字符串line ranges行范围,startline,endline:/pat1/,/pat2/或(NRstartlineNRendline)相关控制语句及示例if(condition) statements找出系统上UID大于等于1000的用户并将用户输出形式类似于“Conmon user gwx”awk -F: {if ($31000) printf Common user: %s\n,$1} /etc/passwd找出系统上默认shell为/bin/bash的用户并输出该用户的用户名awk -F: {if ($NF /bin/bash)print $1} /etc/passwd找出系统上默认shell为bash的用户并输出该用户的用户名awk -F: {if ($NF~bash$)print $1} /etc/passwd输出当前系统上fstab挂载的设备情况awk {if ($1!#)print $0} /etc/fstab输出当前系统使用比例超过80%的分区df -h |awk -F% /\/dev/{print $1}|awk {if ($NF80)print $1}if(condition){statements} else {statements}找出系统上UID大于等于1000的用户并将用户输出形式类似于“Conmon user gwx”其余用户输出形式类似于“Sysuserphp”awk -F: {if ($31000) {printf Common user: %s\n,$1} else {printf Sysuser: %s\n,$1}} /etc/passwdwhile (condition){statements}输出当前系统/etc/grub2.cfg文件中以linux16开头的行的字符数大于等于7个的字段并在字段的后面显示该字段的字符数awk /^[[:space:]]*linux16/{i1;while (iNF){if (length($i)7){print $i,length($i)};i}} /etc/grub2.cfgfor(expr1;expr2;expr3){statements}输出当前系统/etc/grub2.cfg文件中以linux16开头的行字段并在字段的后面显示该字段的字符数awk /^[[:space:]]*linux16/{for (i1;iNF;i){print $i,length($i)}} /etc/grub2.cfg相关扩展 针对与使用awk统计网站访问相关日志字段定义样例如下,如果日志文件做了轮替设置请查看对应要统计的日志文件做统计分析10.6.9.15 – – [12/Nov/2016:16:24:15 0800] GET / HTTP/1.1 200 258 - Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36统计访问频次最高的5个ipcat /var/log/httpd/access_log |awk {print $1}|sort|uniq -c|sort -nr|head -5统计恶意ipcat /var/log/httpd/access_log|awk {if($9~/40/){print $1}}|sort|uniq|sort -nr找出访问最多的文件(下载类网站常用,这里以.exe扩展名举例)cat /var/log/httpd/access_log|awk ($7 ~/.exe/){print $10 $1 $4$7} |sort -n |uniq -c |sort -nr |head -10统计该网站的流量,统计结果以“G“”显示cat /var/log/httpd/access_log|awk {sum$10} END {print sum/1024/1024/1024G}查看日志中出现100次以上的IPcat /var/log/httpd/access_log-20161113|cut -d -f 1 |sort |uniq -c | awk {if ($1 100) print $0}查看某一IP在网站内都访问了哪些资源cat /var/log/httpd/access_log-20161113| grep 10.6.9.15| awk {print $1\t$7} | sort | uniq -c | sort -nr | less原创文章作者N24-wenxuan如若转载请注明出处http://www.178linux.com/62423