正则表达式 awk笔记
awk '条件类型1 {动作1}条件类型2{动作2}...' filename NF 每一行($0)拥有的字段总数 NR AWK所处理的是某一行的数据 FS 输入字段分割字符,默认为空格 RS输入行分隔符 OFS输出字段分隔符 ORS输出行分隔符 FNR各自统计行 BEGIN 表示后面不带文件 只做演示 -F 分隔符 awk ?v 设置变量 NF-- 最后一列,NF-=2 最后2列 例:echo -e "1 2 3 4 5 6"|awk 'NF-=2' 例:打印passwd文件中ID小于10的用户 cat /etc/passwd | awk -F":" ' $3<10 {print $1 "t" $3}' 计算出每个人的总额 [root@localhost ~]# cat aa | awk 'NR==1{print $1,$2,$3,$4,"Total"}NR>=2{total=$2+$3+$4;print $1,total}' Name 1st 2nd 3th Total VBird 23000 24000 25000 72000 DMTsai 21000 20000 23000 64000 Bird2 43000 42000 41000 126000 [root@localhost ~]# awk -vtest="test" 'BEGIN{print test}' Test 或者 [root@localhost ~]# awk'BEGIN{test="test";print test}' Test 多个语句之间要用分号;隔开 Printf [root@localhost ~]# awk -F : '$3>500{print $1,$3}' /etc/passwd nfsnobody 65534 www 501 mysql 502 nagios 503 aaa 504 打印出passwd文件中ID大于500的用户 [root@localhost ~]# awk -F :'$7~"bash$" {print $1,$7}' /etc/passwd root /bin/bash chen /bin/bash nagios /bin/bash 打印出第七列以bash结尾的用户 awk -F : '$7!~"bash$" {print$1,$7}' /etc/passwd 取反 [root@localhost ~]# awk -F : '/^r/ {print$1,$7}' /etc/passwd root /bin/bash rpc /sbin/nologin rtkit /sbin/nologin rpcuser /sbin/nologin 去以r开头的行 [root@localhost ~]# awk -F : '/^r/,/^m/ {print$1,$7}' /etc/passwd 第一个r开头的行到第一个m开头的行 [root@localhost ~]# awk -F:'$3==0,$7~"bash$"{print $1,$7}' /etc/passwd root /bin/bash 取ID=0和第七列以bash结尾的行 [root@localhost ~]# awk -F:'$3==0,$7~"nologin"{printf "%-10s%-10s%-20sn",$1,$7}'/etc/passwd root0 /bin/bash bin1 /sbin/nologin 取第三列=0和第七列以nologin结尾的值打印$1 $3 $7 "%-10s%-10s%-20sn"表示中间隔多少字符串 BEGIN/END awk执行前执行一次和awk执行后执行一次 [root@localhost ~]# awk -F: 'BEGIN{print "usernameID shell"}$3==0,$7~"nologin"{printf"%-10s%-10s%-20sn",$7}' /etc/passwd username IDshell root0 /bin/bash bin1 /sbin/nologin AWK执行前 打印出三列的表头 [root@localhost ~]# awk -F: 'BEGIN{print"username IDshell"}$3==0,$7}END{print "End of file"}' /etc/passwd usernameID shell root0 /bin/bash bin1 /sbin/nologin End of file AWK执行后 打印出结束语 [root@localhost ~]# awk -F: '{if($1=="root") print $1,"this is admin";else print$1,"no admin"}' /etc/passwd root this is admin bin no admin daemon no admin adm no admin if语句 如果$1=root则显示$1为this isadmin 否则显示no admin [root@localhost ~]# awk -F: -v sum=0 '{if($3>500) sum++}END{print sum}' /etc/passwd 5 -v 变量sum赋值为0 如果ID大于500 则sum+1 执行完成后显示sum的值 netstat -ant | awk'/^tcp/{state[$NF]++}END{for (s in state) {print s,state[s]}}' 查看TCP状态 [root@localhost ~]# awk'{count[$1]++}END{for (ip in count) {print ip,count[ip]}}'/home/webserver/nginx/logs/access.log 统计网站每个IP访问量 另:文件比较工具 diff diff参数用法 -b 忽略一行当中的空格 -B 或略空白行 -i 忽略大小写的不同 用法:diff [-bBi] 文件1 文件2即可 (也可比较目录) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |