【发布时间】:2012-09-12 17:31:15
【问题描述】:
我有两个列表。我需要确定第一个列表中的哪个单词最常出现在第二个列表中。第一个,list1.txt 包含一个单词列表,按字母顺序排序,没有重复。我使用了一些脚本来确保每个单词出现在唯一的行上,例如:
canyon
fish
forest
mountain
river
第二个文件list2.txt 是UTF-8 格式,也包含许多项。我还使用了一些脚本来确保每个单词出现在唯一的行上,但有些项目不是单词,有些可能会出现多次,例如:
fish
canyon
ocean
ocean
ocean
ocean
1423
fish
109
fish
109
109
ocean
- 脚本应该输出最常匹配的项目。例如,如果使用上面的 2 个文件运行,输出将是“fish”,因为来自
list1.txt的单词最常出现在list2.txt中。
这是我目前所拥有的。首先,它搜索每个单词并创建一个包含匹配项的 CSV 文件:
#!/bin/bash
while read -r line
do
count=$(grep -c ^$line list2.txt)
echo $line”,”$count >> found.csv
done < ./list1.txt
之后,found.csv 按第二列降序排序。输出是出现在第一行的单词。
不过我不认为这是一个好的脚本,因为它效率不高,并且可能没有最常见的匹配项,例如:
- 如果 2 个或多个单词之间有联系,例如“fish”、“canyon”和“forest”各出现 5 次,而没有其他出现频率如此之高,输出将是这 3 个按字母顺序排列的单词,用逗号分隔,例如:“canyon,fish,forest”。
- 如果
list1.txt中没有任何单词出现在list2.txt中,则输出只是文件list1.txt中的第一个单词,例如“峡谷”。
如何创建一个更高效的脚本来查找第一个列表中的哪个单词最常出现在第二个列表中?
【问题讨论】: