Shell脚本UTM参数巡检结果Excel格式导出:3个实战方案让营销数据可直接用Excel分析
UTM参数是营销链接追踪的核心标识,定期巡检UTM参数是否保留、是否正确传递,是保证流量归因准确的关键。很多团队用Shell脚本做UTM巡检,但生成的CSV或文本结果不方便非技术人员查看,也无法直接做数据透视、可视化分析。本文分享3个Shell脚本实现UTM巡检结果Excel导出的实战方案,覆盖无Python依赖、原生Excel生成、固定模板填充等场景,适配不同环境需求。
方案一:CSV转Excel(纯Shell实现,无额外依赖)
如果服务器没有安装Python环境,可以用纯Shell实现CSV转Excel,核心思路是先生成标准CSV格式的UTM巡检结果,再用系统自带的表格工具转换成Excel格式。
1. 生成UTM巡检CSV文件
先写UTM巡检脚本,把检测结果输出为CSV格式,示例脚本如下:
#!/bin/bash
# UTM巡检生成CSV脚本
CSV_FILE="utm_check_$(date +%Y%m%d).csv"
# 写入CSV表头(带BOM头,避免Excel乱码)
echo -e "\xEF\xBB\xBF检测URL,最终URL,UTM来源,UTM媒介,UTM活动,是否保留,检测时间" > $CSV_FILE
# 遍历待检测的URL列表
for url in $(cat url_list.txt); do
final_url=$(curl -Ls -o /dev/null -w %{url_effective} "$url")
utm_source=$(echo $final_url | grep -oP '(?<=utm_source=)[^&]*')
utm_medium=$(echo $final_url | grep -oP '(?<=utm_medium=)[^&]*')
utm_campaign=$(echo $final_url | grep -oP '(?<=utm_campaign=)[^&]*')
# 判断是否保留UTM参数
if [ -n "$utm_source" ]; then
retain="是"
else
retain="否"
fi
check_time=$(date '+%Y-%m-%d %H:%M:%S')
# 写入CSV行
echo "$url,$final_url,$utm_source,$utm_medium,$utm_campaign,$retain,$check_time" >> $CSV_FILE
done
echo "UTM巡检CSV生成完成:$CSV_FILE"
2. CSV转Excel(兼容Linux/Windows)
生成CSV后,可以用系统自带工具转换成Excel,无需安装额外依赖:
- Linux服务器:安装libreoffice-calc后,执行
libreoffice --headless --convert-to xlsx $CSV_FILE即可生成Excel文件。 - Windows服务器:安装Gnumeric后使用ssconvert工具,命令为
ssconvert $CSV_FILE ${CSV_FILE%.csv}.xlsx;或用PowerShell的Import-Excel模块直接导出。
注意:一定要在CSV开头写入EF BB BF的BOM头,否则Excel打开中文内容会乱码,上面的脚本已经包含了这个处理。
方案二:Python openpyxl库生成原生Excel(功能更强大)
如果服务器有Python3环境,推荐用openpyxl库直接生成原生Excel文件,支持自定义列宽、冻结首行、条件格式、数据筛选等功能,比CSV转换更灵活。
1. 安装依赖
先安装openpyxl库:pip3 install openpyxl,如果需要处理图片可以加装openpyxl[images]可选依赖。
2. 实战脚本:生成带格式的UTM巡检Excel
以下脚本在UTM巡检完成后,直接调用Python生成Excel,并做基础格式优化:
#!/bin/bash
# UTM巡检生成Excel脚本(调用Python)
XLSX_FILE="utm_check_$(date +%Y%m%d).xlsx"
CSV_FILE="utm_check_temp.csv"
# 先生成临时CSV文件(同方案一的输出,此处省略生成代码)
# ...
# 调用Python生成Excel
python3 << EOF
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
import csv
wb = Workbook()
ws = wb.active
ws.title = "UTM巡检结果"
# 读取CSV文件并写入Excel
with open('$CSV_FILE', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
ws.append(row)
# 设置表头格式(加粗、居中)
for cell in ws[1]:
cell.font = Font(bold=True)
cell.alignment = Alignment(horizontal='center', vertical='center')
# 设置列宽自适应
for col in ws.columns:
max_length = 0
column_letter = col[0].column_letter
for cell in col:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = (max_length + 2) * 1.2
ws.column_dimensions[column_letter].width = adjusted_width
# 冻结首行,方便滚动查看
ws.freeze_panes = 'A2'
# 保存Excel文件
wb.save('$XLSX_FILE')
print("Excel文件生成完成:$XLSX_FILE")
EOF
# 删除临时CSV文件
rm -f $CSV_FILE
3. 扩展功能:异常行自动高亮
可以在Python脚本中添加条件格式,把UTM参数未保留的行(即“是否保留”列为“否”的行)标红,方便快速定位问题:
from openpyxl.styles import PatternFill
# 定义红色填充格式
red_fill = PatternFill(start_color='FFFF0000', end_color='FFFF0000', fill_type='solid')
# 遍历数据行(从第2行开始)
for row in ws.iter_rows(min_row=2, max_col=ws.max_column):
if row[5].value == '否': # 第6列是“是否保留”列
for cell in row:
cell.fill = red_fill
方案三:Excel模板填充(适合固定格式的定期报告)
如果需要定期生成格式统一的UTM巡检报告(比如每周给运营团队的汇报),可以提前做好Excel模板,留好数据填充区域,用脚本自动填充数据,避免每次手动调整格式。
1. 制作Excel模板
先手动制作好Excel模板,包含固定的标题、说明、表头,把数据区域留空,比如模板文件为utm_report_template.xlsx,数据从A2单元格开始填充即可。
2. 脚本填充模板
用openpyxl读取模板,填充UTM巡检数据,示例脚本如下:
python3 << EOF
from openpyxl import load_workbook
import csv
template_file = 'utm_report_template.xlsx'
output_file = 'utm_report_$(date +%Y%m%d).xlsx'
# 加载模板
wb = load_workbook(template_file)
ws = wb.active
# 读取UTM巡检数据(假设是CSV格式)
with open('utm_check_temp.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader) # 跳过CSV表头
row_num = 2 # 从模板的A2单元格开始填充
for row in reader:
for col_num, value in enumerate(row, start=1):
ws.cell(row=row_num, column=col_num, value=value)
row_num += 1
# 保存填充后的报告
wb.save(output_file)
print("Excel报告生成完成:$output_file")
EOF
3个方案选型建议
| 方案 | 依赖环境 | 功能丰富度 | 适用场景 |
|---|---|---|---|
| CSV转Excel | 无Python,需要libreoffice或ssconvert | 低(仅基础表格) | 无Python环境、对格式无要求 |
| openpyxl生成Excel | 需要Python3 + openpyxl | 高(支持格式、条件格式、筛选) | 有Python环境、需要自定义格式 |
| 模板填充 | 需要Python3 + openpyxl | 中(格式固定、效率高) | 定期生成固定格式报告 |
相关阅读
- Shell脚本UTM参数巡检定时任务配置:3个实战方案让营销链接追踪完全自动化
- curl批量检测UTM参数CSV报告导出脚本:3个实战方案让营销巡检数据自动归档
- Shell脚本批量检查UTM参数保留:3个实战脚本让流量追踪不再漏数据
以上3个方案覆盖了绝大多数UTM巡检Excel导出的场景,你可以根据自己的服务器环境和需求选择合适的方案。如果在使用过程中遇到编码、格式问题,可以参考之前分享的CSV BOM处理、PowerShell Excel导出相关文章,大部分问题都可以快速解决。
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论