私は2つのリストを持っています。最初のリストのどの単語が2番目のリストに最も頻繁に表示されるかを判別する必要があります。1つ目list1.txt
は、重複のないアルファベット順にソートされた単語のリストを含みます。各単語が一意の行に表示されるようにするスクリプトをいくつか使用しました。例:
canyon
fish
forest
mountain
river
2番目のファイル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
、2列目から降順に並べ替えられます。出力は、最初の行に表示される単語です。ただし、これはあまり効率的ではなく、最も頻繁に一致するアイテムがない可能性があるため、これが優れたスクリプトであるとは思いません。たとえば、次のようになります。
- 「魚」、「峡谷」、「森」など、2つ以上の単語が同点の場合、「魚」、「峡谷」、「森」はそれぞれ5回出現しますが、他の単語はそれほど頻繁には出現しません。出力は、これら3つの単語をアルファベット順にカンマで区切って表示します。例:「峡谷、魚、森」。
- の単語がいずれもに
list1.txt
表示されない場合list2.txt
、出力はファイルの最初の単語になりますlist1.txt
(例:「canyon」)。
最初のリストのどの単語が2番目のリストに最も頻繁に表示されるかを見つける、より効率的なスクリプトを作成するにはどうすればよいですか?