私はKornシェルスクリプトを書いています。私は2つの配列(例えば、arr1
とarr2
)を持っていて、両方とも文字列を含んでいるので、arr1
からどの要素が(全体の文字列または部分文字列として)arr2
に存在するかチェックする必要があります。最も直感的な解決策は、forループネスト、およびarr1
からの各要素は次のように(grep
を通して)arr2
に見出すことができるかどうかをチェックしたれる:そうネストされた実行、2つのkshまたはbashアレイ間で共通の要素を探す
for arr1Element in ${arr1[*]}; do
for arr2Element in ${arr2[*]}; do
# using grep to check if arr1Element is present in arr2Element
echo $arr2Element | grep $arr1Element
done
done
問題がarr2
が約3000の要素を有することですループには長い時間がかかります。私はBashでこれを行うより良い方法があるのだろうかと思います。
もし私がJavaでこれをやっていたのであれば、配列の要素のハッシュを計算してから、別の配列のハッシュを探すことができましたが、Bashにはこれは(私がBashでハッシュ計算関数を書こうとしていない限り)。
提案がありますか?
ハッシュを使ったJavaソリューションがどのように部分文字列を処理するのか分かりません。おそらく、明確にするために擬似コードを追加する必要がありますか? – slim
@slimあなたは正しいです - 部分文字列を扱うことはなく、正確に一致するだけです。私はその部分を追加して、誰かがbashで同等の解決策(正確に一致するもの)を考え出すことができるかどうかを確認しました。 – lebowski
ところで、 '$ {arr1 [*]} 'ではなく、$ {arr1 [@]}" 'を使用してください。後者は言葉を分割し、グロブスを展開し、その他様々な望ましくないことをします。 –