Linux之awk命令


1.awk行处理方式与格式

awk一次处理一行内容
awk对每行可以切片处理

awk '{print $1}' //输出首个单词  uname -a | awk '{print $1}'

命令行格式
awk [options] 'command' file(s)
脚本格式
awk -f awk-script-file  file(s)

command1:pattern {awk操作命令}

操作命令:内置函数: print() printf() getline()
控制指令: if(){...}else{}  while(){...}

awk 内置变量 (1)
$0 表示整个当前行
$1 每行的第一个字段  
$2 每行的第二个字段  

awk内置参数 :分隔符
options : -F field-separator(默认是空格)

例子:
awk -F ':' '{print $1}' /etc/passwd  //打印用户名

awk 内置变量 (2)
NR:每行的记录号
NF:字段数量变量
FILENAME:正在处理的文件名
例子:
awk -F ':' '{print NR,NF,FILENAME}' /etc/passwd 



2.awk内嵌参数应用

awk内置参数应用
1)
awk -F ':' '{if($3>100)print $1,$3}' /etc/passwd
2)
sed -n '/FastCGI/P' error.log | awk '{print $1,$2}' 
等于
cat error.log |awk '/FastCGI/{print $1,$2}'

逻辑判断式
awk逻辑
~,!~ : 匹配正则表达式
==,!=,<,> : 判断逻辑表达式 
例子:
awk -F ':' '$1~/s.*/{print $1}' /etc/passwd  //匹配 s开头的用户名



使用awk扩展格式
awk [options] 'command' file(s)
command2扩展
BEGIN{print "start"}pattern{commands}END{print "end"}


3.awk内嵌程序应用

awk处理过程
案例(-)
统计当前文件夹下的文件/文件夹占用的大小
ls -l | awk 'BEGIN{size=0}{size+=$5}END{print "size is "size/2014/2014"M"}'
案例(二)
统计显示/etc/passwd的账户总人数
awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print count}' /etc/passwd   //去掉空行

统计uid>100的用户名
awk -F ':' 'BEGIN{count=0}{if($3>100)name[count++]=$1}END{for(i=0;i<count;i++)print i,name[i]}' /etc/passwd

案例(三)
统计netstat -anp 状态下LISTENING和CONNECTED的连接数量
netstat -anp | awk '/CONNECTED|LISTENING/{if($4=="ACC"){sum[$7]++}else{sum[$6]++}}END{for(i in sum)print i,sum[i]}'
分类:   程序积累  / 
标签:   awk
 /  浏览量:  237
2019-1-30 11:49 Wednesday