Shell脚本需求:筛选日志中磁盘使用率≥80%的行并保留服务器名称
解决方法
首先得明确你的日志格式,通常这类日志会包含服务器名称和磁盘使用率字段(比如来自df命令的输出,或监控系统生成的日志)。以下是通用的解决方案,适配大多数常见日志格式:
假设日志格式示例
比如你的input-log-file.log内容类似这样(服务器名为第一个字段,使用率为倒数第二个字段,带%符号):
web-server-01 /dev/sda1 50G 44G 6G 88% /
db-server-02 /dev/sdb1 100G 76G 24G 76% /var/lib/mysql
cache-server-03 /dev/sdc1 200G 165G 35G 83% /cache
核心awk命令
要筛选使用率≥80%的行并保留服务器名,直接打印整行即可(整行已包含服务器名),关键是正确提取使用率数值:
awk '{ # 提取倒数第二个字段(使用率,如"88%"),去掉末尾的%符号转成数值 usage = substr($(NF-1), 1, length($(NF-1)) - 1) if (usage >= 80) print $0 }' input-log-file.log > output-log-file.log
适配特殊格式的情况
如果你的日志里使用率字段带有空格(比如 92%),可以用gsub清理多余字符:
awk '{ usage = $(NF-1) gsub(/[% ]/, "", usage) # 去掉%和所有空格 if (usage >= 80) print $0 }' input-log-file.log > output-log-file.log
如果服务器名不在第一个字段(比如是第3个字段),但你想单独突出显示服务器名,可调整打印内容:
awk '{ usage = substr($(NF-1), 1, length($(NF-1)) - 1) if (usage >= 80) print "[" $3 "]", $0 }' input-log-file.log > output-log-file.log
验证结果
执行完命令后,查看output-log-file.log,里面会只保留使用率≥80%的行,且完整包含对应服务器名称。
内容的提问来源于stack exchange,提问作者Kirtee Chaudhary
相关产品推荐
相关产品推荐

