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

Bash统计File B各变量在File A中出现次数的方法

Bash 实现逐关键词统计文件出现次数方案

你之前执行的grep -wc File_B File_A不符合预期的原因是:grep默认语法为grep [选项] 匹配模式 目标文件,该写法会把字符串File_B当作要匹配的关键词,去检索File_A的内容,自然无法实现逐行读取FileB关键词检索的效果。

方案1:原生grep一行命令实现(最快捷)

grep原生支持从文件读取待匹配关键词,用-f参数指定关键词文件即可,搭配对应参数就能直接统计:

# 普通场景,变量名无正则特殊字符时用
grep -owf FileB FileA | sort | uniq -c

参数说明:

  • -o:每匹配到一个关键词就单独输出一行,避免一行内多次匹配只计1次的问题
  • -w:整词匹配,避免短变量名误匹配到长变量名的子串(比如变量a不会匹配到ab、ca这类内容)
  • -f FileB:从FileB中逐行读取内容作为匹配关键词

针对你给出的示例文件,执行后输出如下,和Excel count if的计算结果一致:

2 a
      2 b

如果你的代码变量名包含$、*、.这类正则特殊字符,加-F参数让grep按固定字面量匹配即可,避免正则解析导致匹配错误,命令调整为:

grep -Fowf FileB FileA | sort | uniq -c

方案2:逐行循环统计(方便扩展自定义逻辑)

如果后续需要加额外判断规则(比如筛选出现次数低于阈值的未使用变量),可以用bash循环逐行读取FileB的关键词逐个统计,逻辑更灵活:

while read -r target_var; do
  # 跳过FileB里的空行
  [ -z "$target_var" ] && continue
  # 统计当前变量在FileA中的整词出现次数
  cnt=$(grep -ow "$target_var" FileA | wc -l)
  echo "$cnt $target_var"
done < FileB

这个脚本的输出结果和方案1完全一致,你可以直接在循环体内加自定义的过滤、输出逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:45:44