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

如何用awk仅当第一个字段与第二个字段重复时删除该字段

用Awk处理首字段与次字段重复的场景

问题说明

需要用Awk处理字符串,仅当第一个字段和第二个字段完全相同时删除第一个字段。当前使用的命令会移除所有重复出现的字段:

echo "IBM IBM Dell HP HP"|awk '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}'

输出结果:

IBM Dell HP

但期望仅删除重复的第一个字段,得到输出:IBM Dell HP HP。尝试过!seen[$1,$2]++的写法,但未找到可行方案。

解决方案

可以直接针对首字段和次字段的关系做判断,精准处理:

写法一:遍历控制打印

echo "IBM IBM Dell HP HP" | awk '{if ($1 == $2) {for(i=2;i<=NF;i++) printf "%s ",$i} else {print $0}; print ""}'

写法二:字段置空+去冗余空格

echo "IBM IBM Dell HP HP" | awk '$1==$2{$1=""; sub(/^ /,"")}1'

逻辑解释

  • 写法一:先判断$1和$2是否相等,相等则从第2个字段开始遍历打印;不相等则直接输出整行,最后补换行。
  • 写法二:当$1等于$2时,将$1置为空,再用sub(/^ /,"")去掉行首因置空产生的多余空格,最后1表示强制输出处理后的行。

执行上述命令后,会得到期望输出:

IBM Dell HP HP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:30:43