我有两个文件file1
和file2
。这两个文件包含名称。每行一个名字。我想查询所有名称file2
是not equal to
或suffix of
在名称file1
。请注意,前缀由任何字符后接点(.
)和后缀来标识。
例如。如果file2
包含f2name
在一行中,并且file1
包含sub.f2name
然后f2name
是名称的后缀file1
,我们不想将其放在结果中。
另一个例子是sub1.sub2.f2name
。所述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
。IE:
123.com
究其原因,输出:a.com
在file2
等于在一个名称file1
:aa.bb.com
与bb.com
从file2
是后缀aa.ff.bb.com
和aa.bb.com
在file1
(注:前缀可以重复超过一个或两个的一点是,它能够在名称结束。file2
)。
我试图使用MySQL进行查询。但是file2包含300万行,file1包含100万行。MySQL不能很好地执行。Linux是否具有可以在合理时间内执行此类查询的命令?
我不知道这对于您的输入将有多有效,但是这里有一个可能的策略:
将的行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
除包含正则表达式特殊字符外,.
还需要转义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句