0

Shell脚本UTM参数巡检结果Excel格式导出:3个实战方案让营销数据可直接用Excel分析

2026.06.16 | youres | 6次围观

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 中(格式固定、效率高) 定期生成固定格式报告

相关阅读

以上3个方案覆盖了绝大多数UTM巡检Excel导出的场景,你可以根据自己的服务器环境和需求选择合适的方案。如果在使用过程中遇到编码、格式问题,可以参考之前分享的CSV BOM处理、PowerShell Excel导出相关文章,大部分问题都可以快速解决。

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论