我有兩個列表。我需要確定第一個列表中哪個單詞出現在第二個列表中的頻率最高。第一個,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個文件運行,則輸出將是「魚」,因爲
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
是降序排序第二列。輸出是出現在第一行的單詞。 我不認爲,雖然,這是一個好劇本,因爲它不是那麼有效,而且有可能有可能不是一個最常見的匹配項,對於如:
- 如果出現平局在兩個或更多個單詞之間,例如「魚」,「峽谷」和「森林」每個出現5次,而沒有其他出現的頻率很高,輸出將按照字母順序排列,用逗號隔開,例如:「峽谷,魚,森林」。
- 如果在
list2.txt
中沒有出現list1.txt
的單詞,則輸出僅爲文件list1.txt
的第一個單詞,例如, 「峽谷」。
如何創建一個更高效的腳本來查找第一個列表中哪個單詞出現在第二個單詞中?
+1加入的漂亮的應用程序。你不需要指定連接字段,但它們默認爲1;而第二類是不需要的。但是,您需要對「list1.txt」進行排序。像這樣:join <(sort list1.txt)<(sort list2.txt)| uniq -c | sort -nr |頭-n1'。 – Thor