LINUX系列-awk命令篇

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 'NR3,NR9{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($1bl)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}') #使用大小

NR3,NR9表示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 倒序

posted @ 2023-06-12 19:36  laity_guan  阅读(126)  评论(0)    收藏  举报