标签:awk的使用方法
AWK用法 一、知识点一 1、域分割 -F 确定分割符 如果不加-F 默认以空格分割符 cat /etc/passwd | awk -F: ‘{print $1,$2,$3}‘ 2、抽取域 cat /etc/passwd | awk -F: ‘{print $1}‘ 3、$0代表全局域,也就是所有的记录 cat /etc/passwd | awk -F: ‘{print $0}‘ 4、单独打印记录 cat /etc/passwd | awk -F: ‘{print $1,$4}‘ 5、打印报告头 # cat /etc/passwd | awk -F: ‘BEGIN{print "This is system user"}{print $1}‘ | more 6、打印信息尾 # cat /etc/passwd | awk -F: ‘BEGIN{print "This is system user"}{print $1} END{print "==================="}‘ 二、知识点二 awk正则表达式 (1) ~匹配 cat /etc/passwd | awk ‘{if($0~/root/) print $0}‘ (2) 精确匹配 cat /etc/passwd | awk -F: ‘{if($1~/root/) print $1}‘ (3) 不匹配! cat /etc/passwd | awk ‘$0 !~/root/‘ cat /etc/passwd | awk -F: ‘{if($1~/root/)print $1}‘ (4) 小于 cat /etc/passwd |awk -F: ‘{if($3<200)print $3}‘ (5) 小于或者等于 cat /etc/passwd | awk -F: ‘{if($3<=200)print $3}‘ (6) 大于或者等于 cat /etc/passwd | awk -F: ‘{if($3>=200)print $3}‘ (7) 匹配多个关键字 cat /etc/passwd | awk -F: ‘$1~/(root|user)/‘ (8) 匹配行首 cat /etc/passwd | awk -F: ‘$1~/^root/‘ (9) awk 使用&& || 条件1为真&&则条件二执行 条件1为真|| 则条件二不执行 cat /etc/passwd | awk -F: ‘{if($1=="root" && $5=="root")print $0}‘ cat /etc/passwd | awk -F: ‘{if($1=="root" || $1=="sdfsfsdsdsd") print $0}‘ awk NF 和NR NF 浏览记录域的个数 NR 已读的记录数 cat /etc/passwd | awk -F: ‘{print NF}‘ cat /etc/passwd | awk -F: ‘{print $1,NR}‘ cat /etc/passwd | awk -F: ‘{if(NR<10 && $1~/root/)print $1}‘ awk 替换 gsub(r,s) cat /etc/passwd | awk -F: ‘gsub(/root/,"alvinzeng"){print $0}‘ 本章练习题: 1 awk 默认以什么为分割符? 空格 2 抽取/etc/passwd 第一个域和第5个域并且统计他们的行号 cat passwd |awk -F: ‘{print $1,$5,NR}‘ 3 抽取第一个域,并且进行root匹配,然后打印出报告头内容为"This is user" cat passwd |awk -F: ‘BEGIN{print "this is user"}{if($1~/root/)print $1}‘ 4 抽取最后一个域,尾部信息用“########”分割 cat passwd|awk -F: ‘{print $NF}END{print "========="}‘ 5 请抽取第一个域,请且匹配以user开头的关键字 cat passwd |awk -F: ‘{if($1~/^user/)print $1}‘ 6 匹配全局域带有[0-9]的关键字的域信息 cat passwd |awk -F: ‘$0~/[0-9]/‘ 7 请打印出来行后大于30 并且匹配第一个域为mysql的信息条目 cat passwd |awk -F: ‘{if(NR>30 && $1=="mysql")print $0}‘ 8 请打印出/etc/passwd 里面最后一个域,并且统计bash有多少个?nologin的有多少个? cat paasswd |awk -F: ‘{if($NF~/bash$/)print $NF}‘|wc -l 9 请打印出UID小于500 但是大于200的用户信息 cat passwd |awk -F: ‘{if($3>200 && $3<500)print $0}‘ 10 请打印出带DHCP关键子的用户信息,并且告诉用户在那一行? cat passwd|awk -F: ‘{if($0~/DHCP/)print $0,NR}‘ 11 请打印出wu开头的用户有几个? cat passwd |awk -F: ‘{if($0~/^wu/)print $0}‘ 12 抽取全域匹配home关键字的有多少个用户?他们是否具bash登录权限 cat passwd |awk -F: ‘{if($0~/home/ && $NF~/bash$/)print $0,$NF}‘ 13 匹配行号大于30 并且球UID大于50或者小于500的用户信息 cat passwd |awk -F: ‘{if($3>50 && $3<500 && NR>30)print $0,NR}‘ 14 匹配系统用户有多少个? 以及程序用户有多少个? 系统用户和程序用户的区别就是nologin和bash的区别 15 匹配行号小于30的,并且匹配他们的bash的用户有多少个,在输出他们的行号?
标签:awk的使用方法
原文地址:http://lj644242741.blog.51cto.com/9245272/1539128