1.AWK简介
awk是对文本进行格式化的工具,适合处理比较复杂的文本格式
awk命令格式:awk [option] 'Pattern{Action}'file1,file2....
#Action最常使用的是print,默认以空白字符分隔
#$0代表整行,$1代表第一个字段,$2代表第二个....多个字段用,隔开
awk '{print $1,$2}' log.sh
#可拼接打印
awk '{print "this is "$1,$2}' log.sh
#option参数:
(1) -F,用于指定输入分隔符
#例如文件log.sh内容如下:
#host:192.168.1.13
#url:http://192.168.1.13/operuser
awk -F ":" '{print $S2}' log.sh
#输出结果:192.168.1.13
# http://192.168.1.13/operuser
(2) -OFS,输出字段分隔符,默认为空白字符,OFS为内置变量,需要注意的是,使用变量时,要使用-v选项来指定对应的变量
awk -F ":" -v OFS="-->"'{print $1,$2}'
#输出结果:host-->192.168.1.13
# url-->http://192.168.1.13/operuser
#pattern作为条件,判断当前行是否满足条件,若跟pattern匹配,则进行后面的处理,否则,跳过当前行。
awk -F ":"'NR=='2'{print}' log.sh#打印第二行数据
awk变量
| 变量名 | 变量描述 |
|---|---|
| FS | 输入字段分隔符,默认为空白字符 |
| OFS | 输出字段分隔符,默认为空白字符 |
| RS | 输入记录分隔符(输入换行符),指定输入时的换行符 |
| ORS | 输出记录分隔符(输出换行符),指定输出时的换行符 |
| NF | 当前行的字段数(当前行被分隔符分割成了几段) |
| NR | 当前行的行号 |
| FNR | 不同文件分别计数 |
| FILENAME | 当前文件名 |
| ARGV | 数组,保存的是命令行所给定的各参数 |
| ARGC | ARGC数组的个数 |
2.实例
1)将log1.sh文件中的81端口更改为80
log1.sh文件内容如下:
djksjds 81
fsdkfsd 81
fsdfsdfsd 81
fdsfsdfsdf 81
awk '{sub('80','81');print>"log1.sh"}' log1.sh
#可以使用正则表达式sub
#注意:重定向符号后面的文件名需要加双引号
2)将log文件中按照接口地址出现的次数倒序展示,并同时展示次数
log.sh文件内容如下:
192.168.1.3 10:22 api/getmeminfo
192.168.1.4 10:23 api/finduser
192.168.1.5 10:24 api/operorder
192.168.1.6 10:25 api/getmeminfo
192.168.1.7 10:26 api/payorder
192.168.1.3 10:22 api/getmeminfo
192.168.1.3 10:22 api/operorder
192.168.1.3 10:22 api/finduser
192.168.1.3 10:22 api/operorder
192.168.1.3 10:22 api/finduser
awk '{print $3}' log.sh|sort|uniq -c|sort -rn
结果如下:
3 api/operorder
3 api/getmeminfo
3 api/finduser
1 api/payorder