每天一个linux命令(10)AWK命令用法与举例

一、AWK简介

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
awk处理过程: 依次对每一行进行处理,然后输出

二、常用命令选项

  • -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
  • -v var=value 赋值一个用户定义变量,将外部变量传递给awk
  • -f scripfile 从脚本文件中读取awk命令
  • -m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

三、使用

  • awk 按照默认的空格或者tab分割
  • 变量NF表示当前行有多少个字段,因此$NF就代表最后一个字段。
  • $(NF-1)代表倒数第二个字段。
#按照默认的空格或者tab分割
Cat -n a.log|awk ‘{print $1}’  

#按照自定义的字符分割,使用-F 后面单引号里面写入自定义的内容
Cat -n a.log|awk  -F ‘:’  ‘{print $1}’ 

#增加开始结束行的控制
Cat -n a.log|awk ‘BEGIN{print “开始”} {if(“”!=$1)print$2} END{print “结束”}’

#统计文件中的行数
awk 'END{ print NR }' filename


awk内置变量

  • ARGC 命令行参数个数
  • ARGV 命令行参数排列
  • ENVIRON 支持队列中系统环境变量的使用
  • FILENAME awk浏览的文件名
  • FNR 浏览文件的记录数
  • FS 设置输入域分隔符,等价于命令行 -F选项
  • NF 浏览记录的域的个数
  • NR 已读的记录数
  • OFS 输出域分隔符
  • ORS 输出记录分隔符
  • RS 控制记录分隔符
#自定义变量 统计count
awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd

#统计某个文件夹下的文件占用的字节数
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}’

#如果以M为单位显示:
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}' 

#统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(一般都是文件夹):
ls -l |awk 'BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}' 

你可能感兴趣的:(每天一个linux命令(10)AWK命令用法与举例)