「123456789」を検索し、「名前」に近づきたいとしましょう。それを行う方法はありますか?
私はこれを行うロジックはありません。おそらくパイプされたgrepが動作する可能性がありますか?
この目的に最適なアルゴリズムは何ですか?
入力する:
search_string1='firstname' search_string2='123456789'
proximity_#_of_lines=10
出力:
10本の線が互いに近いかどうかを調べて、例をsearch_string1
見てください。search_string2
つまり、2つの文字列が互いに隣接する10行の場合は、ファイルに表示されます。
ベストアンサー1
標準的なアプローチは次のとおりです。
what_we_want='123456789'
context='firstname'
distance=10
grep -E -e "${context}" -C "${distance}" file_to_look_into | grep -E -e "${what_we_want}" -C "${distance}"
最初は、一致する線を囲む線だけを見ることを保証grep
します。$distance
その後、2番目の項目はその行で見つかったことを確認します$context
。$what_we_want
2*$distance+1
一致する行だけが結果として必要な場合は、-C "${distance}"
2番目の行から削除してくださいgrep
。