awk命令常见用法

经常碰到awk, 今天稍微总结一下
基本命令
awk [-F|-f|-v] ‘ BEGIN{} // {command1; command2} END{}’ file
[-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
BEGIN{},END{} 命令区块
/ ** / 匹配 这里用正则表达式
常用参数
0 1 每行第一个字段,当然也可以 2 , 3
NF 字段数量变量
NR 每行的记录号,多文件记录递增
FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始
\t 制表符 常与OFS=\t 连用
\n 换行符
FS BEGIN时定义分隔符BEGIN{ FS=”:” }
RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~ 匹配,与==相比不是精确比较
!~ 不匹配,不精确比较
== 等于,必须全部相等,精确比较
!= 不等于,精确比较
&&  逻辑与
|| 逻辑或
+ 匹配时表示1个或1个以上
/[0-9][0-9]+/ 两个或两个以上数字 (没用过)
/[0-9][0-9]*/ 一个或一个以上数字
FILENAME 文件名
OFS 输出字段分隔符, 默认也是空格,可以改为制表符等
ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F’[:#/]’ 定义三个分隔符

应用
输出1,3,6列值,制表符作为分隔符

awk  -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd     

依次打印行号,字段数,最后字段值,制表符,每行内容

awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd  

自定义输出

awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd  

输出不匹配mysql的行

awk '!/mysql/{print $0}' /etc/passwd   

//区间匹配

awk -F: '/mail/,/mysql/{print}' /etc/passwd   

// 字段1的值不匹配 mail,输出$1

awk -F: '$1!~/mail/{print $1}' /etc/passwd   

if 用法,必须在{ }内

awk -F: '{if($1~/mail/) {print $1}}'  /etc/passwd          

大于等于

awk -F":" '$3>=100{print $3}' /etc/passwd    

逻辑或,与

awk -F: '{if($1~/mail/ && $3>8) print }' /etc/passwd
awk -F: '$1~/mail/ || $3>1000 {print }' /etc/passwd    

运算
匹配mysql,并将列3列4进行运算

awk -F: '/mysql/{print $3-$4}' /etc/passwd                             
awk -F: '/mysql/{print $3*$4}' /etc/passwd          

输出分隔符OFS

awk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" /etc/passwd      

输出处理结果到文件

route -n|awk 'NR!=1{print}'  > ./fs

指定多个分隔符: #,输出每行多少字段

awk -F'[:#]' '{print NF}'  /etc/passwd 

计算/root目录下,普通文件的大小,使用KB作为单位

ls -l|awk 'BEGIN{sum=0} {sum+=$5} END{print "total size is:",int(sum/1024),"KB"}'

统计netstat -anp 状态为LISTEN和CONNECT的连接数量分别是多少

netstat -anp|awk '$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum) printf "%-10s %-6s %-3s \n", i," ",sum[i]}'

格式化输出printf
%格式化输出分隔符
-8长度为8个字符
s表示字符串类型

netstat -anp|awk '$6=="LISTEN" || NR==1 {printf "%-10s %-10s %-10s \n",$1,$2,$3}'

其他的以后在总结,灵活应用很中要

猜你喜欢

转载自blog.csdn.net/CSDN1887/article/details/81560496