Awk的使用

1 awk的基础知识

awk是文本与数据的处理工具

awk的特点是可以编程,并且处理灵活,功能更强大

awk的应用:统计和制表等等

2 awk的处理方式和格式

awk一次处理一行内容

awk对每行可以切片处理

3 awk的格式有

命令行格式

脚本格式

4 命令行格式有

基本格式

扩展格式

5 基本格式

awk

参数

命令

操作的文件

6 命令由两部分组成

正则表达式或逻辑判断式

awk操作命令

7 awk操作命令语句

内置函数

控制指令

8 awk的内置参数

内置参数的使用格式(awk -F ’:指定的分割符’ ’{print内置参数}’ 文件名)awk的内置变量1:$0表示整个当前行 $1每行第一个字段 $2每行第二个字段,awk内置参数的分割符 参数:-F ’指定的分割符’ 如果没有写将默认为空格,如果想要多个字段加逗号

9 awk的内置变量2

NR每行的行号 NF字段数量的总数或每行的列数 FILENAME正在处理的文件名

案例一: 显示文件中的每行的行号,每行的列数和对应行的用户名

第一种 用print awk-F ’:’ ’{print”Line行号: ”NR, ”Col列数:”NF”,”User用户名: ”$1}’ 文件名

第二种 用printf awk-F ’:’ ’{printf(”Line:%s Col:%s User:%s\n”,NR,

NF,$1)}’文件名 (s前面加上字符数,显示的时候格式会更整齐)

案例二: 显示文件中用户ID大于100的行号和用户名

awk-F ’:’ ’{if条件判断 ($3>100) pint ”Line:”NR, ”User: ”$1}’ 文件名

案例三: 在服务器log中找出Error的发生日期

第一种:sed ’/Error/p’fresh.log | awk ’{print $1}’用sed找出有Error的行

第二种:awk ’/Error/{print $1}’fresh.log 用awk定位Error

10 逻辑判断式

~,!~匹配正则表达式 匹配 不匹配

awk -F ’:’ ’要打印的东西如$1逻辑判断式如~/匹配的条件如^m.*/{print $1}’ 文件名 打印出文件中所有以m开头的第一个字段

= =,!=,< ,>判断逻辑表达式 等于 不等于 小于 大于

awk-F ’:’ ’输出的条件如$3>100 {print $!,$3}’文件名

打印出文件中所有小于100的第一个字段和第三个字段

11 扩展格式

在基本格式之前加入BEGIN,在基本格式之后加入END

案例一: 制表显示/etc/passwd每行的行号,每行的列数,对应行的用户名

awk -F ’:’ 开头部分’BEIND{print “LINE行号 COL列数USER用户名}’

循环部分要打印的字段{print NR每行的行号,NE每行的列数,$1每行的第一个字段}结尾部分END{print”------”FITENAME”------”}’ 文件名

12 awk的逻辑处理案例

案例一: 统计当前文件夹下的文件和文件夹占用的大小

ls -l | awk ’BEGIN(size=0)}{size+=$5}END{print “ size is ”size/1024/1024”M” }’

案例二: 统计显示/etc/passwd/的账户总人数

awk-F ’:’ ‘BEGIN{count=0}$1!~/^$/{count++}END{print “count= ”count}’ 文件名

统计显示UID大于100的用户名

Awk -F ‘:’ ‘BEGIN{count=0}{if ($3 > 100)name[count++]=$1}END{for

(i=0;i<count;i++)printi,name[i]}’ passwd

案例三: 统计netstat-anp状态下为LISTEN和CONNECTED的连接数量

Netstat -anp| awk ‘$6~/CONNECTED|LISTEN/{sum[$6]++}END{for (i in sum)print i,sum[i]}’

13 sed和awk的区别

sed侧重于正则处理

sed和awk可以共同使用

awk和sed都可以处理文本

awk侧重于复杂的逻辑处理