如何在PowerShell中实现识别截取后字符拼接,合并日志缩进行
日志行合并操作指南
需求说明
给定多行结构的系统日志,每条主日志行(行首无缩进)后跟随的若干行缩进附属内容,需要去除缩进附属内容的行首缩进和换行,直接拼接到所属主日志行的末尾。
输入示例
May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice: ASL Module "com.apple.cdscheduler" claims selected messages. Those messages may not appear in standard system log files or in the ASL database. May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice: ASL Module "com.apple.install" claims selected messages. Those messages may not appear in standard system log files or in the ASL database. May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice: ASL Module "com.apple.callhistory.asl.conf" claims selected messages. Those messages may not appear in standard system log files or in the ASL database. May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice: ASL Module "com.apple.authd" sharing output destination "/var/log/asl" with ASL Module "com.apple.asl". Output parameters from ASL Module "com.apple.asl" override any specified in ASL Module "com.apple.authd". May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice: ASL Module "com.apple.mkb" sharing output destination "/private/var/log/keybagd.log" with ASL Module "com.apple.mkb.internal". Output parameters from ASL Module "com.apple.mkb.internal" override any specified in ASL Module "com.apple.mkb".
输出示例
May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice:ASL Module "com.apple.cdscheduler" claims selected messages.Those messages may not appear in standard system log files or in the ASL database. May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice:ASL Module "com.apple.install" claims selected messages.Those messages may not appear in standard system log files or in the ASL database. May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice:ASL Module "com.apple.callhistory.asl.conf" claims selected messages.Those messages may not appear in standard system log files or in the ASL database. May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice:ASL Module "com.apple.authd" sharing output destination "/var/log/asl" with ASL Module "com.apple.asl".Output parameters from ASL Module "com.apple.asl" override any specified in ASL Module "com.apple.authd". May 13 00:30:00 BBAOMACBOOKAIR2 syslogd[113]: Configuration Notice:ASL Module "com.apple.mkb" sharing output destination "/private/var/log/keybagd.log" with ASL Module "com.apple.mkb.internal".Output parameters from ASL Module "com.apple.mkb.internal" override any specified in ASL Module "com.apple.mkb".
实现方案
可以直接使用awk命令完成转换,不需要额外安装工具:
awk '/^[^[:space:]]/ {if (NR>1) print buf; buf=$0; next} {sub(/^[[:space:]]+/,""); buf = buf $0} END {print buf}' 输入日志文件名.log > 输出日志文件名.log
命令逻辑说明
- 匹配行首无空白字符的主日志行:如果不是第一行,先输出上一条已经拼接完成的日志内容,再将当前行存入缓存变量
buf,跳过后续逻辑 - 匹配行首带空白的缩进附属行:先删除行首所有空白字符,再将内容追加到缓存变量
buf末尾 - 所有行处理完成后,输出最后一条缓存的拼接结果
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

