grepを使用して最も長い共通部分文字列を見つける

grepを使用して最も長い共通部分文字列を見つける

次のエントリを含むDictionary.txtという巨大なテキストファイルがあります。

    ABC_SEQ_NUM This represents....
    ABC_RANK This represents....
    ABC_BSC_ID This represents...
    PQR_TA_DATE_AF This represents...
    XYZ_C_ID This represents...

他のファイルには、これらの略語の一部を変数名の一部として使用するプログラムのソースコードがあります。変数名は、上記の項目を次のように使用することがよくあります。

     Facilitator.TMP_ABC_SEQ_NUM 

したがって、一致するものは返されないため、TMP_ABC_SEQ_NUMに対して単にgrepを実行することはできません。ただし、変数名の最後の部分(「ABC_SEQ_NUM」)は実際にはテキストファイルに存在します。

だから私が言いたいことは

      grep (longest match for) TMP_ABC_SEQ_NUM in dictionary.txt

これにより一致が返されます。

      ABC_SEQ_NUM

そのようなコマンドを書くには?

ベストアンサー1

その後、最初から一致が試みられます。

t=TMP_ABC_SEQ_NUM
for n in $(seq 0 ${#t})
do
  grep ${t:n} dictionary.txt && break
done

開始位置に関係なく、最も長いシーケンスを検索します。

for len in $(seq ${#t} -1 3)
do
   for start in $(seq 0 $((${#t}-len)))
   do
       grep ${t:start:len} dictionary.txt && break 2
   done
done 

要件:bashに似たシェル、ここで利用可能:sh.exe、grep、sed、awk、bc、cat、tac、rev、col、cutなどのような多くのGNUユーティリティのデフォルトのwin32ポート...

おすすめ記事