You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWK或其他工具实现备份策略状态记录的精准筛选需求

使用AWK或其他工具实现备份策略状态记录的精准筛选需求

我来帮你搞定这个筛选需求!这个逻辑说起来就是:只要某个备份策略出现过失败记录,就只保留它的失败行;如果全是成功,就保留所有成功行。用AWK就能完美实现,而且效率很高,咱们直接上方案:

核心AWK解决方案

这个方法分两次遍历输入文件:第一次先标记出所有存在失败记录的策略,第二次根据标记结果筛选输出对应的行。

你可以把这段代码存成脚本文件(比如filter_backups.awk):

# 第一次遍历文件,记录有失败记录的策略
NR == FNR {
    if ($3 == "fail") {
        has_fail[$2] = 1  # 用数组标记该策略存在失败
    }
    next  # 跳过后续逻辑,处理下一行
}

# 第二次遍历文件,根据标记筛选输出
{
    if (has_fail[$2]) {
        # 如果策略有过失败,只输出它的失败行
        if ($3 == "fail") print $0
    } else {
        # 如果策略全是成功,输出所有成功行
        if ($3 == "successful") print $0
    }
}

然后运行命令:

awk -f filter_backups.awk input_file.txt input_file.txt

或者嫌麻烦的话,直接用一行命令搞定:

awk 'NR==FNR{if($3=="fail")has_fail[$2]=1;next} has_fail[$2] ? $3=="fail" : $3=="successful"' input_file.txt input_file.txt

这段命令会自动忽略表头,因为表头的第三列是state,既不是fail也不是successful,所以不会被输出,正好符合你的要求。

用Shell工具组合实现(备选方案)

如果你更习惯用基础Shell工具,也可以分两步走:

  1. 先提取所有存在失败记录的策略名:
grep "fail" input_file.txt | awk '{print $2}' | sort -u > failed_policies.txt
  1. 分别筛选输出失败策略的失败行,以及非失败策略的成功行:
# 输出失败策略的所有失败行
grep -Ff failed_policies.txt input_file.txt | grep "fail"
# 输出无失败策略的所有成功行
grep -vFf failed_policies.txt input_file.txt | grep "successful"

不过这个方法需要生成临时文件,不如AWK方案简洁高效,更推荐用AWK的方法。

备注:内容来源于stack exchange,提问作者Sandeep_Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:15:28