1.awk
awk是一个强大的文本分析工具,它可以通过分析文本来生成一个数据报告。它的原理就是读取每行的输入,然后按照分隔符切分(默认是空格),再进行定制计算。
awk '{print $1}' /etc/passwd #打印出passwd文件的所有行的第一列
这是awk的基础语法,在awk中$n代表列数,即$1--第一列,$2---第二列....,但是$0代表整行
接下来我们按照指定的分隔符打印数据:
awk -F ':' '{print $1}' /etc/passwd #将每行按照冒号分隔,打印第一列
现在我们来用另外一种awk的写法打印上图的输出
cat /etc/passwd | awk -F ':' '{print $1}'
awk有一些必须掌握的参数:
[plain] view plain copy
ARGC 命令行参数个数
ARGV 命令行参数排列
FILENAME AWK浏览文件的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,跟-F一样
NF 域的索引,即列号
NR awk读取的当前行号
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
现在我们来打印第一列,当前行号,列号的值
cat /etc/passwd | awk '{print "cols:",$1," rowNumber:",NR," colNumber:",NF}'
awk的语法结构为 awk 'BEGIN{statements} {statements} END{statements}' 其中在BEGIN中的语句是初始化一些变量或者打印一些初始数据的地方,在中间的{}中是进行一些逻辑运算的地方,在END{}中的语句是在计算完成输出之后需要追加的一些输出
cat /etc/passwd | awk 'BEGIN{count=0} {count=count+1;print "count=",count} END{print "END",NR}'
再来看看awk的for和while操作:
ls -l | awk 'BEGIN {print user,time,row} {for(i =0; i< FNR;i++) {print $3,$7,NR}}' #按照总行数循环打印出第三列和第七列,还有行数
ls -l | awk 'BEGIN{print "begin "} {print $0;count=0;while (count < 2) {print $9;count=count+1;} print "count=",count}'
运用awk计算当前文件夹下文件的总大小
ls -l | awk 'BEGIN{count=0} {count = count + $5;} END{print "total=",count}'
网友评论