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

如何使用awk执行多操作编辑文本文件并按规则过滤行

使用AWK实现指定规则的文本过滤

没问题,用AWK处理这种按列过滤的需求简直是得心应手!我给你一步步拆解实现方法:

核心逻辑说明

我们需要排除符合以下两个条件任一的行,保留剩下的行:

  • 条件1:第4列数值小于10,且第5列分组为BA
  • 条件2:第4列数值小于5,且第5列分组为你指定的目标组

基础实现命令

假设你的源文件是input.txt,过滤后的结果输出到output.txt,执行以下命令即可(记得把YOUR_TARGET_GROUP替换成你实际要指定的分组名称,比如CA、DA这类):

awk -F'\t' '!((($4 < 10) && ($5 == "BA")) || (($4 < 5) && ($5 == "YOUR_TARGET_GROUP")))' input.txt > output.txt

命令细节解释

  • -F'\t':告诉AWK使用制表符作为列分隔符,这样才能准确识别第4、5列(AWK默认用空格分隔,不指定的话会出错)
  • !():整个条件取反——因为我们要排除符合过滤规则的行,所以保留不满足规则的行
  • 第一个过滤分支:($4 < 10) && ($5 == "BA") 精准匹配需要排除的第一种情况
  • 第二个过滤分支:($5 == "YOUR_TARGET_GROUP") 替换成你的目标分组即可,比如要过滤分组CA就改成$5 == "CA"

扩展:支持多个指定分组

如果你的"指定组"不止一个(比如要同时排除第4列<5且分组为CA或DA的行),可以用正则匹配来简化:

awk -F'\t' '!((($4 < 10) && ($5 == "BA")) || (($4 < 5) && ($5 ~ /^(CA|DA)$/)))' input.txt > output.txt

这里$5 ~ /^(CA|DA)$/表示第5列是CA或DA的行,你可以根据需要添加更多分组,用|分隔即可。

小提示

如果你的第4列可能存在非数值内容(比如表头),可以先跳过表头行,或者加个判断确保只处理数值行:

# 跳过第一行表头
awk -F'\t' 'NR>1 && !((($4 < 10) && ($5 == "BA")) || (($4 < 5) && ($5 == "YOUR_TARGET_GROUP")))' input.txt > output.txt

内容的提问来源于stack exchange,提问作者user9378401

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:46:57