根据需求生成脚本,涵盖输入输出及约束说明
以下是实现需求的Python脚本,具体包括读取日志文件、解析日志内容、按日期汇总错误和警告信息的数量,并将30天内的统计结果导出为CSV格式的统计报告: ### Python 脚本 ```python import pandas as pd import re from datetime import datetime, timedelta def process_logs(input_log_path, output_csv_path): """ 处理日志文件并生成按日期汇总的错误和警告统计报告,包含最近30天的数据。 参数: input_log_path (str): 日志文件的本地路径(如 logs/app.log)。 output_csv_path (str): 统计报告的输出路径(如 reports/summary.csv)。 """ # 定义正则表达式匹配日期、错误和警告 log_pattern = re.compile(r'(\d{4}-\d{2}-\d{2}).*(ERROR|WARNING)') # 初始化一个空列表存放日志记录 log_data = [] # 读取日志文件 with open(input_log_path, 'r', encoding='utf-8') as log_file: for line in log_file: # 使用正则表达式提取日志中的日期和错误/警告信息 match = log_pattern.search(line) if match: log_date = match.group(1) # 提取日期部分 log_level = match.group(2) # 提取日志级别 (ERROR/WARNING) log_data.append((log_date, log_level)) # 将日志数据加载到DataFrame中 df = pd.DataFrame(log_data, columns=['date', 'level']) # 将日期转换为datetime格式 df['date'] = pd.to_datetime(df['date']) # 过滤出最近30天的数据 thirty_days_ago = datetime.now() - timedelta(days=30) df_recent = df[df['date'] >= thirty_days_ago] # 按日期和级别统计数量 summary = df_recent.groupby(['date', 'level']).size().unstack(fill_value=0) # 确保列包含ERROR和WARNING,如果不存在则填充为0 if 'ERROR' not in summary.columns: summary['ERROR'] = 0 if 'WARNING' not in summary.columns: summary['WARNING'] = 0 # 重置索引并保存为CSV文件 summary = summary.reset_index() summary.to_csv(output_csv_path, index=False) print(f"统计报告已成功生成并保存在 {output_csv_path} 中。") # 输入日志文件路径和输出CSV路径 input_log_path = "logs/app.log" output_csv_path = "reports/summary.csv" # 调用函数处理日志并生成统计报告 process_logs(input_log_path, output_csv_path) ``` ### 功能说明: 1. **日志解析**: - 使用正则表达式`(\d{4}-\d{2}-\d{2}).*(ERROR|WARNING)`,提取日志中的日期和日志级别信息。 - 假设日志行格式中包含类似:`2023-10-01 INFO Some informational message` 或 `2023-10-01 ERROR An error occurred`。 2. **最近30天的过滤**: - 通过DateTime操作计算`最近30天`的日期范围,并过滤掉更早的日志。 3. **统计汇总**: - 使用Pandas的`groupby`进行按日期和日志级别统计。 - 使用`unstack(fill_value=0)`确保未出现的级别补`0`。 4. **输出到CSV**: - 将按日期汇总的错误和警告计数输出为CSV文件,列名包括日期、ERROR和WARNING。 ### 输入/输出文件: - **输入**:日志文件路径:如`logs/app.log`,请根据实际文件调整路径和内容。 - **输出**:统计报告保存路径:如`reports/summary.csv`。 ### 注意: - 在运行脚本前,请确保已经安装`pandas`库。如未安装,请通过如下命令安装: ```bash pip install pandas ``` - 确保日志文件和输出目录已存在,若输出目录不存在需要提前创建(如`reports`目录)。 - 如果日志格式不同,可以适当调整正则表达式`log_pattern`以匹配具体的日志内容。
以下是一个完整的 JavaScript 脚本实现,该脚本使用 `axios` 获取页面数据,结合 `cheerio` 解析 HTML内容,并将包含页面标题和段落文字数据的 JSON 输出到本地文件。脚本还支持通过配置代理来抓取页面内容。 ```javascript // 导入必要的库 const axios = require('axios'); // HTTP 请求库 const cheerio = require('cheerio'); // HTML 解析库 const fs = require('fs'); // 文件系统模块 const path = require('path'); // 路径模块 // 配置输入参数 const targetUrl = 'https://example.com/page'; // 要抓取的 URL const outputFilePath = path.resolve(__dirname, 'data/page_data.json'); // 输出的 JSON 文件路径 const proxyConfig = { // 如果需要代理,在此指定 useProxy: false, // 是否启用代理 proxy: { host: '127.0.0.1', // 代理主机 port: 8080, // 代理端口 }, }; // 定义一个主函数 async function scrapeWebPage(url, outputFilePath) { try { // 配置 axios 请求选项 const axiosConfig = { method: 'get', url: url, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36', }, }; // 如果需要代理,则添加代理配置 if (proxyConfig.useProxy) { axiosConfig.proxy = { host: proxyConfig.proxy.host, port: proxyConfig.proxy.port, }; } else { axiosConfig.proxy = false; // 禁用代理 } // 发起 HTTP 请求 console.log(`正在抓取页面内容:${url}`); const response = await axios(axiosConfig); // 检查响应状态 if (response.status !== 200) { throw new Error(`请求失败,状态码:${response.status}`); } // 解析 HTML 内容 const html = response.data; const $ = cheerio.load(html); // 提取所需信息 const pageTitle = $('title').text(); // 页面标题 const paragraphs = []; // 存储段落文本的数组 $('p').each((_, element) => { paragraphs.push($(element).text().trim()); }); // 构造 JSON 数据 const pageData = { title: pageTitle, paragraphs: paragraphs, url: url, }; // 将 JSON 数据写入文件 fs.mkdirSync(path.dirname(outputFilePath), { recursive: true }); // 确保目录存在 fs.writeFileSync(outputFilePath, JSON.stringify(pageData, null, 2), 'utf-8'); // 写入 JSON 文件 console.log(`页面数据已成功抓取并保存到:${outputFilePath}`); } catch (error) { console.error(`发生错误:${error.message}`); } } // 执行主函数 scrapeWebPage(targetUrl, outputFilePath); ``` ### 脚本说明: 1. **依赖库**: - `axios`: HTTP 请求库,用于抓取网页内容。 - `cheerio`: 用于解析和提取 HTML 文档中的内容。 - `fs` 和 `path`: Node.js 自带的库,用于文件操作及路径管理。 2. **功能特性**: - 抓取指定 URL 页面。 - 提取页面的标题(`<title>`)和所有段落内容(`<p>`)。 - 以 JSON 格式保存到指定的本地文件。 3. **代理支持**: - 如果需要代理,可通过 `proxyConfig` 对象设置代理 `host` 和 `port`,并将 `useProxy` 设为 `true`。 4. **输入输出**: - **输入**:指定的 URL(`targetUrl`)。 - **输出**:保存到本地 JSON 文件(默认路径为 `data/page_data.json`)。 5. **运行方法**: - 安装依赖:确保安装了 `axios` 和 `cheerio`,可以用以下命令安装: ```bash npm install axios cheerio ``` - 执行脚本: ```bash node script.js ``` 注意将 `script.js` 替换为脚本文件的实际名称。 6. **输出 JSON 示例**: ```json { "title": "Example Page", "paragraphs": [ "This is the first paragraph.", "This is the second paragraph.", "..." ], "url": "https://example.com/page" } ``` 如果你有其他特定需求或想法,我们可以进一步扩展脚本功能。
以下是一个实现上述需求的Shell脚本: ```bash #!/bin/bash # Shell脚本用于压缩指定目录并上传到指定的远程服务器 # 检查输入参数是否完整 if [ "$#" -ne 2 ]; then echo "Usage: $0 <local_directory_path> <remote_server_path>" exit 1 fi LOCAL_DIRECTORY=$1 REMOTE_SERVER_PATH=$2 TIMESTAMP=$(date +"%Y%m%d_%H%M%S") ZIP_FILE="backup_$TIMESTAMP.zip" LOG_FILE="log.txt" # 检查本地目录是否存在 if [ ! -d "$LOCAL_DIRECTORY" ]; then echo "Error: Directory '$LOCAL_DIRECTORY' does not exist." | tee -a $LOG_FILE exit 1 fi # 压缩指定目录到ZIP文件 echo "Compressing directory $LOCAL_DIRECTORY to $ZIP_FILE..." | tee -a $LOG_FILE zip -r $ZIP_FILE $LOCAL_DIRECTORY > /dev/null 2>> $LOG_FILE if [ $? -ne 0 ]; then echo "Error: Failed to compress $LOCAL_DIRECTORY. Check $LOG_FILE for details." | tee -a $LOG_FILE exit 1 fi echo "Compression completed successfully." | tee -a $LOG_FILE # 上传压缩文件到远程服务器 echo "Uploading $ZIP_FILE to $REMOTE_SERVER_PATH..." | tee -a $LOG_FILE scp $ZIP_FILE $REMOTE_SERVER_PATH 2>> $LOG_FILE if [ $? -ne 0 ]; then echo "Error: Failed to upload $ZIP_FILE to $REMOTE_SERVER_PATH. Check $LOG_FILE for details." | tee -a $LOG_FILE exit 1 fi echo "Upload completed successfully." | tee -a $LOG_FILE # 清理本地生成的ZIP文件 echo "Cleaning up local files..." | tee -a $LOG_FILE rm -f $ZIP_FILE if [ $? -ne 0 ]; then echo "Warning: Failed to delete local file $ZIP_FILE. Please remove it manually." | tee -a $LOG_FILE else echo "Cleanup completed successfully." | tee -a $LOG_FILE fi echo "Script execution finished. Check $LOG_FILE for the summary." | tee -a $LOG_FILE exit 0 ``` ### 脚本说明: 1. **参数校验**: - 检查脚本是否接收了两个参数:本地目录路径 `local_directory_path` 和远程服务器路径 `remote_server_path`。 2. **日志记录**: - 使用 `tee` 记录日志到 `log.txt`,该日志包含压缩与上传过程的详细记录,便于排查问题。 3. **目录验证**: - 如果输入的本地目录不存在,则直接退出脚本并在日志中记录错误。 4. **压缩**: - 使用 `zip -r` 命令递归压缩指定目录内容为 `.zip` 文件,确保支持大于 1GB 的文件夹。 5. **上传**: - 使用 `scp` 命令将生成的 `.zip` 文件上传到远程服务器指定路径。 6. **本地清理**: - 成功上传后,删除本地生成的 `.zip` 文件以节省空间。 7. **日志文件**: - 日志文件 `log.txt` 始终记录脚本运行状态、错误及其他信息。 ### 依赖: - 需要本地安装 `zip` 和 `scp` 工具。 - 远程服务器需要支持 SCP 协议,并设置了必要的权限和连接。 ### 调用方法: ```bash ./backup_and_upload.sh /home/user/data scp://10.0.0.1:/backups/ ``` 如果需要实现更加高级功能,如更加细粒度的进度显示或支持其他协议,可进一步扩展脚本逻辑。
需要快速实现特定功能脚本的开发者,通过提示词一键生成高质量代码,节省大量时间和精力。
借助提示词生成可用的脚本样例,用于原型验证或者传递具体需求,跨越技术沟通的障碍。
需要简单脚本来高效处理数据的用户,通过提示节省手动编码的时间,集中精力在数据分析上。
利用生成的脚本来编写日常运维任务工具,比如日志分析、批量操作等,优化自动化运维效率。
想练习编程逻辑或快速获得参考实例的新手,通过提示词生成多样化代码,用于学习和提升技能。
帮助用户快速生成高质量的任务脚本,覆盖输入和输出方案设计,并明确操作约束,提升开发效率与准确性。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
免费获取高级提示词-优惠即将到期