每天一个linux命令(10)AWK命令用法与举例
2019-10-30 本文已影响0人
HAO延WEI
一、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"}'