如何对比每行斜杠分隔数值并输出指定状态结果?
解决方案
用awk可以高效处理这类文本对比需求,以下是直接可用的命令:
awk -F'[: /]+' '{ name = $1 actual = $3 expected = $4 if (actual == 0) { printf "%s: broken\n", name } else if (actual == expected) { printf "%s: working\n", name } else { printf "%s: warning\n", name } }'
使用说明
处理文件:如果输入内容保存在文件(比如
status.txt)中,运行:awk -F'[: /]+' '{ name = $1 actual = $3 expected = $4 if (actual == 0) { printf "%s: broken\n", name } else if (actual == expected) { printf "%s: working\n", name } else { printf "%s: warning\n", name } }' status.txt处理命令输出:如果输入来自其他命令的结果,用管道传递:
your_source_command | awk -F'[: /]+' '{ name = $1 actual = $3 expected = $4 if (actual == 0) { printf "%s: broken\n", name } else if (actual == expected) { printf "%s: working\n", name } else { printf "%s: warning\n", name } }'
逻辑解释
-F'[: /]+':将冒号、空格、斜杠都设为字段分隔符,自动把每行拆分出名称、实际计数、预期计数三个关键值。- 优先级判断:先检查实际计数是否为0(输出
broken),再判断实际与预期是否相等(输出working),剩余情况输出warning,完全匹配需求。
测试示例
输入:
uniquename1: count 2/3 uniquename2: count 3/3 uniquename3: count 1/1 uniquename4: count 3/1 uniquename5: count 0/0 uniquename6: count 1/1 uniquename7: count 1/3 uniquename8: count 2/2
运行命令后输出:
uniquename1: warning uniquename2: working uniquename3: working uniquename4: warning uniquename5: broken uniquename6: working uniquename7: warning uniquename8: working
内容的提问来源于stack exchange,提问作者beastx
相关产品推荐
相关产品推荐

