1 awk常用功能
awk命令的常用功能 |
简要说明 |
指定分隔符显示某几列 |
awk -F "GET|HTTP" '{print $2}' access.log 直接取出显示日志文件的url这一列 |
通过正则表达式取出你想要的内容 |
awk '$6~/Failed/ {print $11}' /var/log/secure. 分析生产环境中日志找出谁在破解用户密码 |
显示出某个范围的内容 |
awk 'NR==20,NR==30' filename 显示文件的20行到30行 |
通过awk进行统计计算 |
awk '{sum+=$0}END{print sum}' ett.txt 计算总和 |
awk数组计算与去重 |
awk '{array[$1]++}END{for(key in array)print key,array[key]}' access.log 对日志进行统计与计数 |
2 awk参数选项及说明
参数选项 |
解释说明 |
-F |
指定字段分隔符 |
-v |
定义或修改一个awk内部的变量 |
FS |
字段分隔符变量,等价于-F选项 |
NF |
表示最后一列 |
NR |
表示行号信息 |
3案例说明
3.1 展示行号
[root@iZbp1el3hto8hhgtlih1m4Z test]# awk '{print NR,$0}' 1_useradd_piliang.sh
1 #!/bin/bash
2
3 #第一步获取到创建用户的名称,这里使用前台输入
4 USER_LIST=$@
5 #存放创建好的用户和密码
6 USER_FILE=./new_user.log
7
8
9 #开始进行循环
10 for USER in $USER_LIST;do
11 if ! id $USER &>/dev/null;then
12 PASS=$(echo $RANDOM | md5sum | cut -c 1-8)
13 useradd $USER
14 echo $PASS | passwd --stdin $USER
15 echo "$USER--$PASS" >> $USER_FILE
16 echo "$USER 用户创建成功!!!"
17 else
18 echo "$USER 用户是存在的!!!"
19
20 fi
21
22
23 done
[root@iZbp1el3hto8hhgtlih1m4Z test]#
这里NR表示行号,$0表示一整行内容
3.2 显示3-9行内容,并展示行号
[root@iZbp1el3hto8hhgtlih1m4Z test]# awk 'NR==3,NR==9{print NR,$0}' 3_disk_cpu_mem.sh
3 #磁盘空间查看
4 disk(){ #disk函数
5 cipan=$(df -h | awk '/^\/dev/{print $1}') #输出以dev开头的
6 for cp in $cipan;do #循环上面的列表
7 mounted=$(df -h | awk -v bl=$cp '{if($1==bl)print $NF}') #挂载 awk中一个变量等于for循环中的cp值,再进行判断是否相等,相等输出对应的值,$NF为最后一列的值
8 size=$(df -h | awk -v bl=$cp '{if($1==bl)print $2}') #总大小
9 used=$(df -h | awk -v bl=$cp '{if($1==bl)print $3}') #使用大小
NR==3,NR==9表示3-9行内容
3.3 获取文件的第一列、第三列和最后一列
[root@iZbp1el3hto8hhgtlih1m4Z test]# awk -F ":" '{print $1,$3,$NF}' /etc/passwd
root 0 /bin/bash
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
adm 3 /sbin/nologin
lp 4 /sbin/nologin
[root@iZbp1el3hto8hhgtlih1m4Z test]#
$NF 代表最后一列 -F 以 : 为分隔符
3.4 替换文本内容gsub函数
[root@iZbp1el3hto8hhgtlih1m4Z test]# more new_user.log
zhangsan--ab
lisi--
wangwu--
zhaoliu--
haha--264258a8
zhangsan--34becb91
lisi--2d8f5be5
xiaosan--890ca5d3
xiaosi--a862ebb7
zhangwu--db38b7f5
[root@iZbp1el3hto8hhgtlih1m4Z test]# awk '{gsub("zhang","heiha",$0);print $0}' new_user.log > a.log
[root@iZbp1el3hto8hhgtlih1m4Z test]# more a.log
heihasan--ab
lisi--
wangwu--
zhaoliu--
haha--264258a8
heihasan--34becb91
lisi--2d8f5be5
xiaosan--890ca5d3
xiaosi--a862ebb7
heihawu--db38b7f5
[root@iZbp1el3hto8hhgtlih1m4Z test]#
使用gsub函数,gsub("旧字符串","新字符串",替换位置)
3.5 取出数据并进行排序计数
[root@iZbp1el3hto8hhgtlih1m4Z test]# awk -F "/" '{print $3}' awk_jishu.txt | sort |uniq -c | sort -rn
3 www.etiantian.org
2 post.etiantian.org
1 mp3.etiantian.org
[root@iZbp1el3hto8hhgtlih1m4Z test]#
awk -F "/" '{print $3}' awk_jishu.txt 取出域名
sort 排序
uniq -c 去重计数
sort -rn 倒序