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

低内存高效awk/shell命令:统计同时拥有apple和oranges的人数

高效统计同时拥有指定项的用户数量

针对你这种大型数据文件的统计需求,要兼顾低内存占用和快执行速度,用awk是最优选择——它可以逐行处理数据,不用把整个文件加载到内存里,完美适配大文件场景。

实现命令

BEGIN { FS="," }
{
    if ($4 == "apple") users[$1] |= 1;
    else if ($4 == "oranges") users[$1] |= 2;
}
END {
    count=0;
    for (user in users) if (users[user] == 3) count++;
    print count;
}

命令细节解释

  • BEGIN { FS="," }:先设置字段分隔符为逗号,告诉awk如何拆分每行的内容,确保能准确提取第1列和第4列数据。
  • 逐行处理时,用一个哈希数组users记录每个用户的状态:
    • 如果当前行第4列是apple,给该用户的标记位加上1(用位运算|=比普通赋值更高效,且节省内存)。
    • 如果是oranges,给标记位加上2。
  • END块:遍历所有用户,只有当标记位等于3(也就是同时拥有1和2,意味着该用户既有apple又有oranges记录)时,计数加一,最后输出总数量。

为什么这个方案符合要求

  • 内存占用极低:数组users只存储每个用户的一个整数标记,不管该用户有多少条记录,都只占一条数组项,内存占用不会随文件行数线性增长。
  • 执行速度极快:awk是原生文本处理工具,逐行处理无额外IO开销,位运算也比字符串拼接/判断更高效,能快速跑完大文件。

把你的测试数据输入后,这个命令会输出2,正好对应jon和tom两个符合条件的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:40:51