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

如何用AWK实现按第一列去重并保留每组最后一行?

解决保留第一列相同行组最后一行的问题

你的需求是仅保留第一列内容相同的连续行组中的最后一行,但当前使用的AWK命令逻辑有误,无法得到期望结果。

问题分析

你当前的命令:
awk 'BEGIN { FS=OFS=";" } $1==last{next} {last=$1} {print last}' test.txt
存在两个关键问题:

  1. 逻辑顺序错误:遇到同组行直接跳过,导致无法记录组内的最后一行
  2. 输出内容错误:打印的是仅第一列的last值,而非完整的行内容

正确的AWK命令

使用以下命令可以实现需求:
awk 'BEGIN{FS=OFS=";"} $1 != last {if (last != "") print prev; last=$1} {prev=$0} END{print prev}' test.txt

逻辑解释

  • 初始化分隔符FS和OFS为分号,保证输出格式与输入一致
  • 当当前行第一列与上一组的第一列last不同时:
    • 若last不为空(排除第一行的初始情况),打印上一组保存的最后一行prev
    • 更新last为当前行的第一列,切换到新行组
  • 每次循环将当前完整行保存到prev,确保prev始终是当前组的最后一行
  • END块打印最后一组的最后一行——因为循环结束时,最后一组的内容还未输出

测试验证

输入文件test.txt内容:

817399;"john";;
817399;"CCE";;
817399;"smith";;
817399;"Ron";;
817400;;
817400;;
817400;;
818000;"ODC";;
890021;;
890021;;
890021;"rachel";;
890021;"monica"```

执行命令后输出:
```818522;"Joey";;
817399;"Ron";;
817400;;
818000;"ODC";;
890021;"monica"```

完全符合你的期望输出。

内容的提问来源于stack exchange,提问作者José Souza
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:05:10