awk学习[参考转载]
一.基本示例
1.last -n 5 | awk '{print $1}' $0代表全部
2.last -n 5 | awk -F: '{print $1}' -F代表设置分割符, :代表设置的分割符,也可以写成-F ':' (默认空格是分隔符)
3.last -n 5 | awk -F: 'BEGIN {print "name,shell"} {print $1} END {print "blue,/bin/nosh"}'
4.last -n 5 | awk '/admin/' //表示正则
5.last -n 5 | awk '/^admin/{print $1}'
二.内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
示例:last -n 5 | awk -F: '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}'
三.print和printf
print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。
四.自定义变量
last -n 5 | awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}'
以上中,count就是自定义的变量
ls -l | awk 'BEGIN {size=0;} {size=size+$5} END {print "size is", size}' 某个文件夹中所有文件的字节数
ls -l | awk 'BEGIN {size=0;} {size=size+$5} END {print "size is", size/1024/1024, "M"}' 某个文件夹中所有文件的大小,单位为M
五.if判断(if, else if, else)
ls -l | awk 'BEGIN {size=0;} {if($5>120000){size=size+$5}} END {print "size is", size/1024/1024, "M"}' 某个文件夹中所有文件大小大于120000字节的文件的总大小
六.循环(awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同)
last -n 5 | awk -F: 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' awk中的数组与变量都是自动创建的
ls -l | awk 'BEGIN {size=0;ind=0;con=""} {if($5>size){size=$5;ind=NR;con=$0}} END {print size, "index is ",ind,"content is",con}'
七.更多请参考
http://www.gnu.org/software/gawk/manual/gawk.html
示例:
cat /proc/meminfo|awk 'BEGIN{total=0;cached=0;free=0}{if(NR==1)total=$2;if(NR==2)free=$2;if(NR==4)cached=$2}END{print (free+cached)/total}'
百度阅读电子书地址:http://yuedu.baidu.com/ebook/f6dbb2a2f01dc281e53af0f3
讨论QQ群:536192476
个人公众号: