file1
2つのファイルがあり、file2
これら2つのファイルには。 1行に1つの名前です。のすべての名前file2
またはnot equal to
にあるsuffix of
名前を照会したいですfile1
。接頭辞は、.
任意の文字と点()と接尾辞によって識別されます。
例えば。file2
インクルードがf2name
行にあり、インクルードfile1
がの名前のサフィックスsub.f2name
でf2name
ある場合、file1
結果に含めたくありません。
もう一つの例はですsub1.sub2.f2name
。 inのnames
前にはfile1
、複数のプレフィックス(ドットで区切られた文字)が続くことがあります。名前は、file2
必要な数の接頭辞の接尾辞として表示することも、名前と同じにすることもできますfile1
。
クエリの名前がfile2
同じではなく、名前プレフィックスのサフィックス以外の名前が必要ですfile1
。例: 以下をfile2
含みます。
bb.com
a.com
123.com
file1
含む:
aa.bb.com
aa.ff.bb.com
aa.bb.cc.com
a.com
私が望む名前はfile2
同じでもなく、サフィックスでもない名前ですfile1
。つまり:
123.com
出力理由:
a.com
inはinのfile2
名前と同じで、fromはand inのサフィックスです(注:プレフィックスは1つまたは複数回繰り返すことができます。重要なのは、名前がinで終わるということです)。file1
aa.bb.com
bb.com
file2
aa.ff.bb.com
aa.bb.com
file1
file2
MySQLを使用してクエリを試しました。ただし、file2には300万行が含まれ、file1には100万行が含まれます。 MySQLが正しく動作しません。合理的な時間内にこれらのクエリを実行できるコマンドはLinuxにありますか?
答え1
あなたの意見によると、これがどれほど効率的かはわかりませんが、考えられる戦略は次のとおりです。
file2
ラインをラインアンカー正規表現パターンに変換sed -e 's/\./\\./g' -e 's/$/\$/' file2
パターンをgrepにパイプして一致する部分のみを出力します。
file1
... | grep -of - file1
(オプション)固有の結果
file2
一致するアイテムのプレーンテキスト検索... | grep -vxFf - file2
前任者。
$ sed -e 's/\./\\./g' -e 's/$/\$/' file2 |
grep -of - file1 |
sort -u |
grep -vxFf - file2
123.com
file2
項目にこれら以外の正規表現特殊文字が含まれている場合でも、.
エスケープする必要があります。