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

如何修改Awk命令筛选new.list中大于old.list末行$1的唯一行

筛选new.list中特定行的Awk命令

现有情况

当前使用以下命令对比两个已按数值排序的文件,输出new.list中第一列($1)在old.list里不存在的行:

awk -F, 'NR==FNR {exclude[$1];next} !($1 in exclude)' old.list new.list > changes.list

文件内容

  • old.list:
30606,10,57561
30607,100,26540
30611,300,35,5.068
30612,100,211,0.035
30613,200,5479,0.005
30616,100,2,15.118
30618,0,1257,0.009
30620,14,8729,0.021
  • new.list:
30606,10,57561
30607,100,26540
30611,300,35,5.068
30612,100,211,0.035
30613,200,5479,0.005
30615,50,874,00.2
30616,100,2,15.118
30618,0,1257,0.009
30620,14,8729,0.021
30690,10,87,0.021
30800,20,97,1.021

当前执行结果

30615,50,874,00.2
30690,10,87,0.021
30800,20,97,1.021

需求

需要修改命令,仅输出new.list中满足两个条件的行:

  1. $1在old.list中不存在(即new.list独有)
  2. $1的数值大于old.list最后一行的$1(即30620)

期望结果:

30690,10,87,0.021
30800,20,97,1.021

解决方案

可以使用以下Awk命令实现:

awk -F, 'NR==FNR {exclude[$1]; last=$1; next} !($1 in exclude) && ($1 > last)' old.list new.list > changes.list

命令逻辑解释

  • NR==FNR {exclude[$1]; last=$1; next}:处理第一个文件(old.list)时,将所有$1存入exclude数组,同时记录最后一行的$1到变量last,随后跳过后续逻辑。
  • !($1 in exclude) && ($1 > last):处理第二个文件(new.list)时,仅输出满足两个条件的行:$1不在exclude数组内(即new.list独有),且$1的数值大于last(old.list最后一行的$1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:10:20