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

如何在Bash中统计指定字符串出现次数并整合现有文件统计结果

解决方案

核心思路

通过find定位目标文件,结合bash子脚本处理单个文件,同时用wc统计总行数、grep统计指定字符串的出现次数,最后整合结果并排序。

直接可用的命令(字符串硬编码版)

find . -type f -name "*usc*.vhd" -exec bash -c '
file="$1"
# 获取文件总行数
total_lines=$(wc -l < "$file")
# 定义需要统计的字符串列表
target_strings=("end component" "end process" "signal" "variable")
# 输出文件名+总行数
printf "%-40s %8d" "$file" "$total_lines"
# 遍历每个字符串,统计并输出次数
for str in "${target_strings[@]}"; do
    match_count=$(grep -c -F "$str" "$file")
    printf " %8d" "$match_count"
done
printf "\n"
' _ {} \; | sort -k2,2rn | column -t

可灵活调整的版本(字符串存文件)

如果需要频繁修改字符串列表,建议把字符串写入单独文件(比如strings.txt,每行一个字符串):

# strings.txt 内容示例
end component
end process
signal
variable

对应的命令:

find . -type f -name "*usc*.vhd" -exec bash -c '
file="$1"
total_lines=$(wc -l < "$file")
printf "%-40s %8d" "$file" "$total_lines"
# 从文件读取字符串并统计
while IFS= read -r str; do
    match_count=$(grep -c -F "$str" "$file")
    printf " %8d" "$match_count"
done < strings.txt
printf "\n"
' _ {} \; | sort -k2,2rn | column -t

关键参数说明

  • grep -c -F "$str":-c统计匹配次数,-F将字符串视为固定文本而非正则表达式,避免特殊字符干扰匹配精度。
  • wc -l < "$file":比wc -l "$file"更高效,仅输出行数数字,无需处理文件名。
  • sort -k2,2rn:按第二列(总行数)降序排序。
  • column -t:自动对齐输出列,让结果更易读。

调整说明

  • 若需要忽略大小写匹配,给grep添加-i参数即可。
  • 修改字符串列表时,直接编辑target_strings数组或strings.txt文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:40:30