auditd.log中每条记录包含多个name=value,这些name=value用冒号或者空格隔开,某些value的类型为数值型,某些value的类型为字符串。现要求读取dirpath文件夹下的所有子文件夹中以_audit.log 结尾的文件,先按照arch字段分类,统计_audit.log文件中syscall=number对中number的种类,将统计结果存入csv文件中。存入的csv文件可包含多个sheet表,表名称为读取的_audit.log 结尾的文件的完整文件名。
时间: 2024-03-31 22:34:22 浏览: 54
好的,根据您的要求,我稍微修改了一下之前的代码。修改后的代码如下:
```python
import os
import pandas as pd
# 指定目录
dirpath = "/path/to/your/directory"
# 遍历目录下所有子文件夹中以 "_audit.log" 结尾的文件
for root, dirs, files in os.walk(dirpath):
for file in files:
if file.endswith("_audit.log"):
filepath = os.path.join(root, file)
# 读取文件
with open(filepath, "r") as f:
lines = f.readlines()
# 构建数据框
data = []
for line in lines:
if "syscall=" in line:
pairs = line.strip().split()
pairs = [pair.split("=") for pair in pairs]
pairs = {pair[0]: pair[1] for pair in pairs}
data.append(pairs)
df = pd.DataFrame(data)
# 按照 arch 字段分类统计 syscall=number 对
grouped = df.groupby("arch")["syscall"].value_counts()
grouped = grouped.reset_index(name="count")
# 将统计结果写入 CSV 文件
filename = file.replace(".log", ".csv")
with pd.ExcelWriter(filename) as writer:
sheetname = os.path.splitext(file)[0]
grouped.to_excel(writer, sheet_name=sheetname, index=False)
```
这段代码与之前的代码类似,只是将统计结果保存为了一个 CSV 文件,文件名为读取的日志文件名,并且每个文件只包含一个 sheet 表,表名为读取的日志文件名。
阅读全文