如何使用grep统计list.txt中词汇在当前目录CSV文件的各自出现次数
统计list.txt中姓名在CSV文件中出现次数的方案
方案1:批量快速统计
执行如下命令即可得到你需要的输出格式:
grep -riohf list.txt --include="*.csv" . | sort | uniq -c | awk '{print $2, $1}'
参数说明:
--include="*.csv":限定仅搜索csv格式文件,避免匹配到其他无关文件-r:递归搜索当前目录下的所有子目录-i:忽略大小写匹配,如需大小写敏感可删除该参数-o:仅输出匹配到的内容片段,而非整行-h:输出结果不携带文件名-f list.txt:从list.txt文件中读取需要匹配的关键词- 后续管道命令:先对匹配结果排序,再用
uniq -c统计每个关键词的出现次数,最后用awk调换顺序输出姓名在前、次数在后的格式。
该方案执行效率高,适合csv文件数量多、数据量大的场景,缺点是不会输出出现次数为0的姓名。
方案2:按list.txt顺序遍历统计
如果你需要输出顺序和list.txt完全一致,且出现次数为0的姓名也显示为0,可执行如下命令:
while read -r name; do count=$(grep -riohF "$name" --include="*.csv" . | wc -l) echo "$name $count" done < list.txt
额外新增的-F参数会将姓名作为固定字符串匹配,避免姓名中包含特殊符号时被识别为正则表达式导致匹配错误。
可选优化项
- 如需避免短姓名匹配到长姓名的子串(比如
Viny不会匹配到VinyTest),可给grep增加-w参数开启全单词匹配 - 如需仅统计CSV中单元格完全等于姓名的场景,可给grep增加
-x参数开启整行匹配
内容的提问来源于stack exchange,提问作者Ébano Assumpção
相关产品推荐
相关产品推荐

