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

如何使用awk提取以第一字段为分组键的已排序文件的最后一组数据

问题原因

你编写的awk命令存在执行顺序逻辑错误:

  • 原命令会先执行a[NR]=$0将当前行存入数组,再判断当前行第一字段是否和上一组分组键p一致
  • 当切换到新分组的第一行时,新分组的首行会先被存入数组,紧接着触发分组不一致的逻辑清空整个数组,导致新分组的首行丢失,最终输出就会少一行

修正后的命令

调整逻辑顺序,先判断分组是否切换,再存储当前行即可:

awk -F, 'p != $1 { delete a; p = $1 } { a[NR] = $0 } END { for(i=1; i<=NR; i++) if(i in a) print a[i] }'

如果需要严格保证输出顺序和原文件一致,避免awk哈希数组遍历顺序不稳定的问题,可以用下面的版本:

awk -F, '$1 != prev { n = 0; prev = $1 } { arr[++n] = $0 } END { for(i=1; i<=n; i++) print arr[i] }'

这个版本不需要判断数组下标是否存在,直接按存储顺序遍历输出即可,内存占用也更低。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:27:03