linux命令更新-文本处理awk

news2024/11/15 6:59:39

awk命令简介

awk是一种强大的文本处理工具,可以对文本文件进行格式化、统计、计算等操作。它逐行读取文本文件,并对每一行进行处理。awk的语法相对简单,但功能非常强大,是Linux系统中常用的文本处理工具之一。

awk命令基本语法

awk的基本语法格式如下:

awk 'pattern {action}' input-file

  • pattern: 模式,用于匹配特定的行。

  • action: 动作,对匹配的行进行的操作。

  • input-file: 输入文件。

awk命令常用参数

  • -F fs: 指定字段分隔符,默认是空格或Tab。

  • -v var=value: 定义变量。

  • -f script: 从脚本文件中读取awk程序。

awk命令常用功能

1 打印指定字段
awk -F ':' '{print $1,$3}' passwd  # 打印passwd文件中每一行的第一个和第三个字段

2 条件过滤
awk -F ':' '$3 >= 500 {print $1}' passwd  # 打印uid大于等于500的用户

3 算术运算
awk -F ':' '{print $1,$3*1024}' passwd  # 将第三个字段乘以1024

4 字符串操作
awk -F ':' '$1 ~ /root/ {print $0}' passwd  # 匹配用户名为root的行

5 自定义函数
awk -F ':' 'function sum(a,b) {return a+b} {print sum($2,$3)}' passwd  # 自定义求和函数

6 BEGIN和END块
awk 'BEGIN {print "User\tUID"} {print $1"\t"$3} END {print "Total users:" NR}' passwd

awk命令运维案例

1 统计日志文件中的错误次数

假设有一个日志文件access.log,格式如下:

192.168.1.1 - - [06/Apr/2004:00:01:02 -0400] "GET /index.html HTTP/1.1" 200 12345
192.168.1.2 - - [06/Apr/2004:00:02:03 -0400] "GET /error.html HTTP/1.1" 404 567

统计出现404错误的次数:

awk -F ' ' '$9 == "404" {count++} END {print "Total 404 errors:", count}' access.log

2 计算文件大小总和

假设有一个文件列表file_list.txt,每一行是一个文件名和大小(以字节为单位),格式如下:

file1.txt 12345
file2.txt 67890

计算所有文件的大小总和:

awk '{sum+=$2} END {print "Total size:", sum}' file_list.txt

3 格式化输出

假设有一个CSV文件user.csv,包含用户名、年龄和性别,格式如下:

张三,25,男
李四,30,女

将数据格式化为表格形式输出:

awk -F ',' 'BEGIN {print "姓名\t年龄\t性别"} {print $1"\t"$2"\t"$3}' user.csv

脚本用例

脚本一:分析系统日志,找出异常登录行为

脚本功能:

  • 分析系统日志,找出连续多次登录失败的 IP 地址。

  • 将异常登录信息写入日志文件。

#!/bin/bash

# 日志文件
logfile="/var/log/secure"

# 连续登录失败次数阈值
fail_count=5

# 输出日志文件
output_log="failed_login.log"

# 使用 awk 分析日志,找出满足条件的记录
awk -v fail_count="$fail_count" -v output="$output_log" '
    BEGIN {
        count = 0
    }
    /Failed password for/ {
        ip = $11
        if (ip in failed_ips) {
            failed_ips[ip]++
        } else {
            failed_ips[ip] = 1
        }
        if (failed_ips[ip] >= fail_count) {
            print $0 >> output
            delete failed_ips[ip]
        }
    }
' "$logfile"

脚本解释:

  • 变量:

  • logfile:指定要分析的日志文件。

  • fail_count:设置连续登录失败的次数阈值。

  • output_log:指定输出日志文件的路径。

  • awk 部分:

  • BEGIN 块:初始化变量 count 和关联数组 failed_ips

  • /Failed password for/ 模式:匹配包含 “Failed password for” 的行,即登录失败的行。

  • 提取 IP 地址,并更新 failed_ips 数组中的计数。

  • 当某个 IP 的失败次数达到阈值时,将该行写入输出日志文件,并从 failed_ips 中删除该 IP。

脚本二:分析 Nginx 访问日志,查找异常请求

脚本功能:

  • 分析 Nginx 访问日志,找出访问频率过高的 IP 地址。

  • 将异常请求信息写入日志文件。

#!/bin/bash

# 日志文件
logfile="/var/log/nginx/access.log"

# 时间窗口(秒)
time_window=600

# 请求次数阈值
request_count=100

# 输出日志文件
output_log="abnormal_requests.log"

# 使用 awk 分析日志,找出满足条件的记录
awk -v window="$time_window" -v count="$request_count" -v output="$output_log" '
    BEGIN {
        start_time = systime()
    }
    {
        if (systime() - start_time > window) {
            for (ip in requests) {
                if (requests[ip] >= count) {
                    print ip, requests[ip] >> output
                }
                delete requests[ip]
            }
            start_time = systime()
        }
        ip = $1
        requests[ip]++
    }
    END {
        for (ip in requests) {
            if (requests[ip] >= count) {
                print ip, requests[ip] >> output
            }
        }
    }
' "$logfile"

脚本解释:

  • 变量:

  • logfile:指定要分析的日志文件。

  • time_window:设置时间窗口,即统计请求次数的时间段。

  • request_count:设置请求次数阈值。

  • output_log:指定输出日志文件的路径。

  • awk 部分:

  • BEGIN 块:初始化 start_time

  • 每处理一行日志:

  • 判断是否超过时间窗口,如果是,则输出超过请求次数阈值的 IP。

  • 更新 requests 数组,记录每个 IP 的请求次数。

  • END 块:处理最后剩余的请求数据。

总结

awk命令是Linux系统中非常强大的文本处理工具,通过灵活运用其模式匹配、变量、函数等功能,可以实现各种文本处理任务。本文仅介绍了awk命令的基本用法和一些常见的运维案例,awk的功能远不止于此。建议读者通过查阅相关资料和实践来深入学习awk。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1951028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某数据泄露防护(DLP)系统NoticeAjax接口SQL注入漏洞复现 [附POC]

文章目录 某数据泄露防护(DLP)系统NoticeAjax接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现某数据泄露防护(DLP)系统NoticeAjax接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内…

60个常见的 Linux 指令

1.ssh 登录到计算机主机 ssh -p port usernamehostnameusername: 远程计算机上的用户账户名。 hostname: 远程计算机的 IP 地址或主机名。 -p 选项指定端口号。 2.ls 列出目录内容 ls ls -l # 显示详细列表 ls -a # 显示包括隐藏文件在内的所有内…

关于深度学习中的cuda编程,cuda相关介绍

深度学习中会涉及大量的、重复的矩阵运算、图形运算,而CPU对这种简单的加减法加速不够显著,可以使用GPU进行加速运算 CUDA是英伟达旗下的专门为深度学习加速运算的显卡,其对于简单的浮点运算、矩形运算相较于CPU加速了数倍不止 本文介绍CUD…

结合GB/T28181规范探讨Android平台设备接入模块心跳实现

技术背景 好多开发者在用我们Android平台GB28181设备接入模块的时候,更希望跟我们探讨一些协议规范方面,以便在现场对接时,可以知其然知其所以然。比如,有开发者提到,GB28181的状态消息报送这块到底要怎么实现&#x…

搭建Vue开发环境

一、下载Vue.js 进入官网教程安装 — Vue.js (vuejs.org) 下载开发版本到本地 二、安装 Vue Devtools 安装完成后

Spring Boot 与 MongoDB 整合指南

MongoDB MongoDB 是一种基于文档的NoSQL数据库,以其高性能、高可用性和易扩展性而著称。它使用 BSON(类似 JSON 的二进制格式)来存储数据,提供了灵活的数据模型,使得开发者可以更轻松地存储和查询复杂的数据结构。将M…

Navicat premium最新【16/17 版本】安装下载教程,图文步骤详解(超简单,一步到位,免费下载领取)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Navicat是一款快速、可靠且功能全面的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设计。以下是对Navicat的详细介绍: 一、产品概述 开发目的:Navicat旨在通过其直观和设计…

Linux:core文件无法生成排查步骤

1、进程的RLIMIT_CORE或RLIMIT_SIZE被设置为0。使用getrlimit和ulimit检查修改。 使用ulimit -a 命令检查是否开启core文件生成限制 如果发现-c后面的结果是0,就临时添加环境变量ulimit -c unlimited,之后在启动程序观察是否有core生成,如果…

Qt 学习第二天:创建第一个Qt程序

【最新QT从入门到实战完整版|传智教育】04 创建第一个Qt程序 一、命名规范(驼峰命名法) 类名: 首字母大写,单词和单词之间首字母大写 函数名和变量名: 首字母小写,单词和单词之间首字母大写 二、快捷…

零食商城管理系统

目录 一、项目背景与目标 1.1 项目背景 1.2 项目意义 1.3 国内外研究现状 1.4 开发工具介绍 二、项目内容与分工 三、 时间表与进度 1. 需求分析阶段: 2. 系统设计阶段: 3. 系统开发阶段: 4. 系统测试阶段: 5. 部署与上…

Selenium 的使用

selenium 是一个自动化测试工具,利用它可以驱动浏览器完成特定的操作,例如点击,下拉等,还可以获取浏览器当前呈现的页面的源代码,做到所见即所爬,对于一些 JavaScript 动态渲染的界面来说,这种爬…

WEB攻防-通用漏洞-SQL 读写注入-MYSQLMSSQLPostgreSQL

什么是高权限注入 高权限注入指的是攻击者通过SQL注入漏洞,利用具有高级权限的数据库账户(如MYSQL的root用户、MSSQL的sa用户、PostgreSQL的dba用户)执行恶意SQL语句。这些高级权限账户能够访问和修改数据库中的所有数据,甚至执行…

WEB集群-Tomact集群

linux云计算中小企业规模集群架构设计图----总结 在写今天内容前,小编绘制一个图:我设计了linux云计算中小企业规模集群架构设计图(也可根据业务需求,增加业务变成大型企业架构设计图) 知识补充–故障案例-https no s…

【Golang 面试基础题】每日 5 题(十)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

Python爬虫(6) --深层爬取

深层爬取 在前面几篇的内容中,我们都是爬取网页表面的信息,这次我们通过表层内容,深度爬取内部数据。 接着按照之前的步骤,我们先访问表层页面: 指定url发送请求获取你想要的数据数据解析 我们试着将以下豆瓣读书页…

WPF代办事项应用

目录 一 设计原型 二 后台源码 一 设计原型 添加代办事项页面: 二 后台源码 Model: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 待办事项应用.DataModel {pub…

数据结构(Java):Map集合Set集合哈希表

目录 1、介绍 1.1 Map和Set 1.2 模型 2、Map集合 2.1 Map集合说明 2.2 Map.Entry<K&#xff0c;V> 2.3 Map常用方法 2.4 Map注意事项及实现类 3、Set集合 3.1 Set集合说明 3.2 Set常用方法 3.3 Set注意事项及其实现类 4、TreeMap&TreeSet 4.1 集合类TreeM…

头歌最小生成树 ------习题

一、背包问题 1.理解&#xff1a;背包问题相当于最小生成树&#xff0c;也就是线性规划最优解 2.公式&#xff1a; M: 背包的总重量 w&#xff1a;物品 i 的重量 p: 物品 i 的价值 3.基本背包练习 4.完全背包问题&#xff1a;每种物品有无限件 >>> 开头加一个for…

面试常考Linux指令

文件权限 操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制&#xff0c;在 Linux 中权限一般分为读(readable)、写(writable)和执行(executable)&#xff0c;分为三组。分别对应文件的属主(owner)&#xff0c;属组(group)和其他用…

SearchGPT 搜索引擎发布:让信息检索变得简单

如今的互联网时代&#xff0c;我们每天都在与海量数据搏斗。无论是学习、工作还是生活&#xff0c;我们都需要快速准确地获取所需信息。然而&#xff0c;传统搜索引擎往往让人感到力不从心&#xff1a;关键词需要精准&#xff0c;结果泛滥成灾&#xff0c;有用信息如大海捞针。…