macOS系统下system log转换为CSV格式的消息解析问题
解决方案
核心要解决的是CSV字段包含特殊字符的合规性问题,遵循RFC4180 CSV规范处理即可,修改后的可用脚本如下:
# 输出CSV表头 echo "DATE, SYSTEM, SERVICE, MESSAGE" # 处理含error的日志行 grep error system.log \ | while IFS=' ' read d1 d2 d3 sys svc msg; do printf '%s, %s, %s, "%s"\n' "$d1 $d2 $d3" "macbook" "$svc" "${msg//\"/\"\"}" done
关键调整说明
- MESSAGE字段无需提前删除内部逗号,只要用双引号完整包裹,所有CSV解析工具都能正确识别该字段
${msg//\"/\"\"}是shell变量替换语法,作用是把MESSAGE内容里原本存在的双引号替换为两个连续双引号,符合CSV转义规则,避免字段提前被意外闭合- read命令的最后一个变量
msg会自动承接前五个字段拆分后的所有剩余日志内容,不会截断MESSAGE信息 - 如果不需要固定主机名为
macbook,只需要保留原日志的主机名,把printf参数里的"macbook"替换为"$sys"即可
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

