如何用Shell脚本过滤日志文件,保留进程计数>0的条目及服务器信息
日志过滤Shell脚本解决方案
需要处理input-data-file.log,过滤掉所有计数为0或空数组[]的进程状态条目,同时保留服务器会话的上下文信息(如命令行、退出信息等),最终输出到output-data-file.log。
解决方案脚本
awk ' # 标记是否处于需要过滤进程条目的区块 in_process_block = 0 # 匹配服务器命令行或退出相关行,直接输出,并重置区块标记 /^\[user@SERVER/ || /exit$/ || /logout$/ || /Connection to SERVER/ { print $0 in_process_block = 0 next } # 匹配"Data loading lists...",直接输出,并标记进入进程区块 /^Data loading lists...$/ { print $0 in_process_block = 1 next } # 处于进程区块时,过滤掉0或空数组的条目 in_process_block { if (!/: 0$/ && !/: \[\]$/) { print $0 } } ' input-data-file.log > output-data-file.log
脚本逻辑说明
- 上下文保留:直接输出服务器会话的命令行(如
[user@SERVER-1 bin]$ ./script.sh)、退出相关行(exit、logout、连接关闭信息),确保服务器信息完整保留。 - 区块标记:当遇到
Data loading lists...时,标记进入进程状态条目区块,开始过滤操作。 - 过滤规则:在进程区块内,只保留不匹配
: 0(计数为0)和: [](空数组)的行,自动排除无效条目。 - 完整输出:所有符合条件的内容直接写入
output-data-file.log。
运行方式
- 将上述脚本保存为
filter-log.sh - 赋予执行权限:
chmod +x filter-log.sh - 执行脚本生成目标文件:
./filter-log.sh
内容的提问来源于stack exchange,提问作者Kirtee Chaudhary
相关产品推荐
相关产品推荐

