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 '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     倒序
posted @ 2023-06-12 19:36  laity_guan  阅读(73)  评论(0编辑  收藏  举报