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

如何用awk去除文件中含重复WordC:WordD模式的行?

用AWK按指定模式去重行:保留唯一的WordC:WordD模式行

你之前的命令问题在于用整行内容作为去重判断依据(seen[$0]),但你的需求是基于行内的WordC:WordD模式去重——只要这个模式重复,不管整行其他内容差异,都要过滤重复行。核心是要提取每行中的目标模式作为去重的键。

解决方案(GNU AWK 4.0+)

awk 'match($0, /[a-zA-Z]+:[a-zA-Z]+/, m) { if (!seen[m[0]]++) print }' file.txt

命令解释

  • match($0, /[a-zA-Z]+:[a-zA-Z]+/, m):匹配当前行中的字母:字母模式,将匹配结果存入数组m,m[0]就是完整的目标模式字符串(比如bear:tiger)。
  • !seen[m[0]]++:判断该模式是否未出现过,第一次匹配时条件为真,打印当前行,同时将seen[m[0]]自增标记为已出现;后续再遇到相同模式时条件为假,跳过打印。

兼容老版本AWK的写法

如果你的AWK版本不支持match的第三个参数(比如BSD AWK),可以用RSTART和RLENGTH提取模式:

awk '{
    if (match($0, /[a-zA-Z]+:[a-zA-Z]+/)) {
        pattern = substr($0, RSTART, RLENGTH)
        if (!seen[pattern]++) print
    }
}' file.txt

示例验证

假设file.txt内容如下:

cat dog bear:tiger mouse elephant
fox wolf bear:lion rabbit deer
bird snake bear:tiger frog fish

运行命令后将输出前两行,第三行因bear:tiger模式重复被过滤,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:55:19