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

使用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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值