如何优化命令以获取文本文件中目标词对的最大出现次数
解决方法:直接统计词对总次数并比较
你可以用两种简单的方式实现需求,一种是用awk一次性扫描文件统计(适合大文件,效率更高),另一种是用grep+wc组合配合bash条件判断(更直观易懂)。
方法1:使用awk脚本(推荐大文件)
直接用awk遍历文件中的每个单词,分别统计目标词的出现次数,再计算词对总和并比较:
awk '{ # 遍历当前行的每个单词 for (i=1; i<=NF; i++) { # 精确匹配目标词,忽略大小写(去掉末尾的i可改为严格区分大小写) if ($i ~ /^hi$/i) hi_count++ else if ($i ~ /^hello$/i) hello_count++ else if ($i ~ /^Good$/i) good_count++ else if ($i ~ /^Bye$/i) bye_count++ } } END { # 计算两个词对的总次数 pair_total_1 = hi_count + hello_count pair_total_2 = good_count + bye_count # 比较并输出结果 if (pair_total_1 > pair_total_2) { print "Hi/hello是出现次数最多的词对" } else if (pair_total_2 > pair_total_1) { print "Good/Bye是出现次数最多的词对" } else { print "两组词对出现次数相同" } }' Simple.txt
关键细节说明:
^和$确保精确匹配单词,避免把high里的hi或者helloworld里的hello算进去/i选项忽略大小写,如果你的文件里目标词有大小写混合(比如Hi/HELLO),这个设置很有用;如果需要严格区分大小写,删掉每个正则末尾的i即可- awk只需要扫描文件一次,处理大文件时比多次调用grep更快
方法2:用grep+wc配合bash判断(直观易读)
先分别统计两个词对的总出现次数,再用bash的条件语句比较结果:
# 统计hi/hello的总次数(-o只输出匹配部分,-i忽略大小写,\b确保单词边界) pair1=$(grep -oiE '\b(hi|hello)\b' Simple.txt | wc -l) # 统计Good/Bye的总次数 pair2=$(grep -oiE '\b(Good|Bye)\b' Simple.txt | wc -l) # 比较次数并输出结果 if [ $pair1 -gt $pair2 ]; then echo "Hi/hello是出现次数最多的词对" elif [ $pair2 -gt $pair1 ]; then echo "Good/Bye是出现次数最多的词对" else echo "两组词对出现次数相同" fi
关键细节说明:
-o参数让grep只输出每个匹配的单词,而不是整行,这样wc -l就能准确统计次数\b是单词边界,避免部分匹配的情况- 如果不需要忽略大小写,去掉
-i参数即可
内容的提问来源于stack exchange,提问作者Parth Parikh
相关产品推荐
相关产品推荐

