Linux:使用bash脚本分析日志(交易信息日志分析)

2023-11-09

使用bash脚本分析日志

背景

线上交易程序不能轻易修改代码,以防止出现不必要的错误。
但于此同时,在进行交易信息分析时,部分需要根据原始数据计算才能得到的指标无法直接获取,而且日志信息比较杂乱,不便汇总分析,因此可以使用bash脚本对日志进行分析。

ps:经过几天时间的学习,我写了一个简单的日志分析脚本,分享一下大致思路,如果哪位同学有更好的解决方式,欢迎指教。

使用命令

for, if, sed, grep, awk, echo, date

实现过程

  1. 截取最近几天的日志,重新保存,对固定时间段的日志进行分析
echo $timeInterval
if [ "$timeInterval" != "" ];then
	startDate=`date -d "${timeInterval} days ago" +%Y-%m-%d`
else
	#startDate=`date -d "100 days ago" +%Y-%m-%d`
	startDate="2018-10-01"
fi
endDate=`date -d "now" +%Y-%m-%d`
#最后一行的时间
lastLineDate=`tail -n 1 $file |awk -F '[ ]' '{print $2}'`
endDate="${endDate} ${lastLineDate}"
#echo $endDate
#截取要分析的时间段的日志
sed -n "/${startDate}/,/${endDate}/p" $file > analysistemp.log

ps:这个是截取n天前到最近的日志,但是当开始时间没有日志时,会报错,或许可以做个判断,不知道有没有更好的解决办法,苦恼。。。

  1. 获取每次交易开始的行号,两个相邻的开始行号之间就是一次交易的日志
grep -niR "predictOpptunity start" $file |awk -F ":20" '{print $1}'
  1. 使用sed命令截取两个行号之间的日志,然后截取需要的字段进行简单的计算
  2. 打印截取的字段和计算结果
    在这里插入图片描述

命令使用

sed

以下是一些sed的使用示例:

1. 替换文本中的字符串:

sed ‘s/old_text/new_text/g’ input.txt > output.txt


这个命令将输入文件input.txt中所有出现的"old_text"替换为"new_text",并将结果输出到output.txt文件中。

2. 删除文本中的某些行:

sed ‘/pattern/d’ input.txt > output.txt


这个命令将输入文件input.txt中所有匹配正则表达式"pattern"的行删除,并将结果输出到output.txt文件中。

3. 在文本中插入新的行:

sed ‘1i
new_line’ input.txt > output.txt


这个命令将输入文件input.txt的第一行之前插入一行"new_line",并将结果输出到output.txt文件中。

4. 使用多个编辑命令:

sed -e ‘s/old_text/new_text/g’ -e ‘/pattern/d’ input.txt > output.txt


这个命令将先执行第一个编辑命令,将输入文件input.txt中所有出现的"old_text"替换为"new_text",然后再执行第二个编辑命令,将所有匹配正则表达式"pattern"的行删除,并将结果输出到output.txt文件中。

awk

awk是一种文本处理工具,它可以用于对文本文件进行各种操作,如查找、替换、格式化等。它是一种命令行工具,常用于Shell脚本中。

awk命令的基本语法如下:

awk [options] 'pattern {action}' file

其中,pattern是用来匹配文本的模式,action是要执行的操作。file是要处理的文本文件。

以下是一些常用的awk命令示例:

  1. 输出文件中的某一列:
awk '{print $2}' file.txt

这个命令将输出file.txt文件中的第二列数据。

  1. 根据条件过滤输出:
awk '$1 == "John" {print $2}' file.txt

这个命令将输出file.txt文件中第一列为"John"的行的第二列数据。

  1. 计算文件中某一列的总和:
awk '{sum += $3} END {print sum}' file.txt

这个命令将计算file.txt文件中第三列数据的总和,并输出结果。

除了上面提到的基本用法外,awk命令还支持以下一些常用选项:

  • -F:指定字段分隔符。例如,-F':'表示使用冒号作为字段分隔符。
  • -v:定义变量并赋值。例如,-v var=value表示定义一个名为var的变量,并将其值设置为value
  • -f:指定awk脚本文件。可以将awk命令的操作写入一个脚本文件中,并使用该选项来指定脚本文件。
  • -i:原地修改文件。使用该选项可以直接修改文件内容。

以下是一些示例:

  1. 使用冒号作为字段分隔符:
awk -F':' '{print $1, $3}' file.txt

这个命令将使用冒号作为字段分隔符,输出file.txt文件中的第一列和第三列数据。

  1. 定义变量并赋值:
awk -v name="John" '{if ($1 == name) print $2}' file.txt

这个命令将定义一个名为name的变量,并将其值设置为"John"。然后,它将输出file.txt文件中第一列为"John"的行的第二列数据。

  1. 使用脚本文件:
awk -f script.awk file.txt

这个命令将使用名为script.awk的脚本文件来处理file.txt文件。

  1. 原地修改文件:
awk -i inplace '{gsub("old_string", "new_string"); print}' file.txt

这个命令将在file.txt文件中进行原地修改,将所有的"old_string"替换为"new_string",并输出修改后的内容。

awk命令的功能非常强大,可以根据不同的需求进行灵活的处理。可以通过man awk命令来查看更多的选项和用法。

除了上面提到的选项和用法外,awk命令还支持以下一些高级用法:

  1. 处理多个文件
awk '{print FILENAME, $0}' file1.txt file2.txt

这个命令将输出file1.txt和file2.txt文件中的所有行,并在每行前面加上文件名。

  1. 使用正则表达式匹配
awk '/pattern/ {print}' file.txt

这个命令将输出file.txt文件中包含"pattern"的所有行。

  1. 处理行和列
awk '{for (i=1; i<=NF; i++) print NR, i, $i}' file.txt

这个命令将输出file.txt文件中每个单词所在的行号、列号和单词本身。

  1. 自定义输出格式
awk '{printf "%-10s %-5s %-5s\n", $1, $2, $3}' file.txt

这个命令将输出file.txt文件中的前三列数据,并使用自定义的输出格式。

awk命令的高级用法非常丰富,可以根据不同的需求进行灵活的处理。可以通过man awk命令来查看更多的选项和用法。

详细代码:https://download.csdn.net/download/zzz19920821/10746823

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux:使用bash脚本分析日志(交易信息日志分析) 的相关文章

  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a

随机推荐

  • JS时间戳转换方式

    前言 在js中将时间戳转换为常用的时间格式 有三种主要的方式 1 使用JS中已有的函数 例如getFullYear getMonth 等 将时间戳直接转换成对应的年月 2 创建时间过滤器 在其他的页面中直接调用该过滤器 转换时间戳 3 使用
  • 使用trtexec工具多batch推理tensorrt模型(trt模型)

    文章目录 零 pt转onnx模型 一 onnx转trt模型 二 推理trt模型 零 pt转onnx模型 参考 https github com ultralytics yolov5 用根目录下的export py可以转pt为onnx模型 命
  • Gem5模拟器,详解官网教程的statistics and output(三)

    gem5是一个计算机模拟器 它可以用来模拟不同类型的计算机系统 以帮助计算机科学家和工程师更好地理解和优化计算机系统的性能 gem5提供了许多统计信息和输出功能 可以帮助用户更好地了解模拟的计算机系统的性能情况 gem5的统计信息可以通过访
  • Ubuntu20.04配置ESP32-IDFV5.1环境及Component工程样例

    更新Ubuntu20 04下载源 cd etc apt 更新sources list为如下下载源 并保存 添加阿里源 deb http mirrors aliyun com ubuntu focal main restricted univ
  • 【Mac】mac安装go

    1 安装 安装 brew install go 这里采用界面安装 http c biancheng net view 3994 html 验证 go version base lcc lcc go version go version go
  • QT creator同时打开多个运行窗口(客户端窗口)

    一 最近在做TCP多连接server的问题 但是发现qt不能同时打开多个客户端窗口 解决办法 可以使用windows下的cmd命令窗口 用命令的方式运行多个客户端 我的客户端的名字是wbclient exe step1 首先通过cmd进入到
  • tomcat 开放远程调试端口

    1 开启远程调试端口 WIN系统 在catalina bat里 SET CATALINA OPTS server Xdebug Xnoagent Djava compiler NONE Xrunjdwp transport dt socke
  • perl脚本的简单调试方法

    初学perl语言 最先接触的不是它的语法 而是它的调试方法 当时是由于一个perl script生成的html页面无法正常显示 让我找出问题的原因 然后修复 当时是第一次接触perl 完全没有任何了解 就凭着学了几句在Teriminal中可
  • rtt下的adbd使用

    RTT 下的ADBD使用 1 引言 调试柿饼时 需要文件传输 由于智龙平台的RTT环境下USB还没有调试好 这里就使用ADB进行文件传输 找到了何元杰的帖子 并参考 rdb 建立 RTT与PC 的文件传输通道 2 使用环境 2 1 硬件平台
  • 5万条药品数据库下载数据,带图片

    链接 https pan baidu com s 1zBytf7BGty I3FCBPF2PxA 提取码 fshp
  • C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程

    如果这是您阅读的本专栏的第一篇博文 建议先阅读如何安装Visual Studio 2022 C 入门教程 01 Visual Studio 2022 免费安装的详细图文与动画教程https blog csdn net beijinghorn
  • 富爸爸穷爸爸

    有意思的观点 1 贫穷和破产的区别 破产是暂时的 而贫穷是永久的 2 我们听说过穷人买彩票中奖的故事 他们一下子暴富起来 但不久又变穷了 还有关于职业运动员的故事 有一个运动员在24岁的时候 一年就挣了几百万美元 但到了34岁的时候却露宿桥
  • java中反射机制的主要作用

    C 自身并没有提供像Java这样完备的反射机制 只是提供了非常简单的动态类型信息 如type info和typeid 然而在一些C 的第三方框架类库中提供了类似的功能 如MFC QT 其中MFC是通过宏的方式实现 QT是通过自己的预编译实现
  • verilog中include的用法

    Verilog 的 include和C语言的include用法是一样一样的 要说区别可能就在于那个点吧 include一般就是包含一个文件 对于Verilog这个文件里的内容无非是一些参数定义 所以 这里再提几个关键字 ifdef defi
  • Oracle入门笔记(五)——Oracle表间关系、SQL语句、基本函数

    Oracle表间关系 SQL语句 基本函数 1 引言 2 数据库的收费问题 3 数据库对SQL标准的兼容性 4 SQL语言的种类 5 Oracle中的HR用户 6 Oracle中基本的SQL语句的使用 7 Oracle中基本函数的使用 1
  • 嵌入式 十个最值得阅读学习的C开源项目代码

    Webbench Webbench是一个在linux下使用的非常简单的网站压测工具 它使用fork 模拟多个客户端同时访问我们设定的URL 测试网站在压力下工作的性能 最多可以模拟3万个并发连接去测试网站的负载能力 Webbench使用C语
  • ICT(计算机通信电子自动化等)专业区别和联系

    ICT 是IT和CT的统称 IT 是信息技术 CT是通信技术 IT 开设的专业主要有 计算机科学与技术 软件工程 信息安全 等 CT 开设的专业有 电子信息工程 自动化 通信工程 光电信息科学与工程 物联网工程 等 区别和联系看专业课就能知
  • 图片验证码之中英文数字混合输入验证的综合应用(python3.X)

    中文验证码生成的案例点击查看 数字英文验证码生成的案例点击查看 这篇用之前学的内容分别生成四位由数字 英文大写字母 英文小写字母和中文汉字随机排列的字符串验证码 使验证码更具其合理性 新增加内容有 1 pip install captcha
  • 小怿和你聊聊V2X测试系列之 如何实现C-V2X HIL测试(2022版)

    在我们2021年的V2X专题分享系列中 分别给大家介绍了 V2X应用场景 V2X仿真测试 以及一篇 V2X HIL测试 分阶段的进行V2X业务的知识普及 大家肯定记忆犹 新 马上关注下怿星科技公众号 搜索关键词V2X 今天尼 我们在这里为大
  • Linux:使用bash脚本分析日志(交易信息日志分析)

    使用bash脚本分析日志 背景 线上交易程序不能轻易修改代码 以防止出现不必要的错误 但于此同时 在进行交易信息分析时 部分需要根据原始数据计算才能得到的指标无法直接获取 而且日志信息比较杂乱 不便汇总分析 因此可以使用bash脚本对日志进