关于判断两个文本的内容

2016-10-07 19:52:11 +08:00
 lovebeyondalways

求教大神 文本 A 如下
176.123.45.78
46.64.117.70
53.43.43.60
文本 B
fdiaofjao 176.123.45.78
hfoisjojo 46.64.117.70
fdsjfoaos 63.65.32.65
请问怎么判断文本 A 的内容被包含于于文本 B

2909 次点击
所在节点    Python
18 条回复
lovebeyondalways
2016-10-07 19:53:25 +08:00
想做的是如果文本 A 有 ip 存在于文本 B 就将它输出
zhidian
2016-10-07 19:58:37 +08:00
选你能用的编程语言, 读入文本 A, 扫描出所有的 IP, 存入 dict 中, 读入文本 B,
依次扫描, 遇到 ip, 如果 ip 在 dict 中, 则输出之. that's easy.
zhuangzhuang1988
2016-10-07 20:03:39 +08:00
northisland
2016-10-07 20:04:00 +08:00
N ( A )数量个 String Searching 问题(Substring)

(我记得最佳解法是用 KMP 算法)


欢迎拍砖~
northisland
2016-10-07 20:06:59 +08:00
后悔了,这是规则文本。

提取 IP ,搜索 IP 查找表,就可以了。
ldbC5uTBj11yaeh5
2016-10-07 20:08:50 +08:00
comm -12 a.txt <(awk '{print $2}' b.txt)
ldbC5uTBj11yaeh5
2016-10-07 20:10:19 +08:00
靠,看错了,居然是 python 节点。
(要啥自行车,用 shell 比 python 要快哒。)
lovebeyondalways
2016-10-07 20:11:03 +08:00
@jigloo 大哥 不好意思 我需要 Python 哈哈
lovebeyondalways
2016-10-07 20:12:25 +08:00
@jigloo 因为这段代码要 放进项目用
ldbC5uTBj11yaeh5
2016-10-07 20:18:28 +08:00
@lovebeyondalways 呵呵,我就喜欢 oneliner , 拿去自己改吧改吧 (手动滑稽

python -c 'import sys; any(sys.stdout.write(i) for i in set(open(sys.argv[1])).intersection((x.split(" ")[1] for x in open(sys.argv[2]))))' a.txt b.txt
northisland
2016-10-07 20:21:42 +08:00
lookup_tb = dict( (e, 1) for e in A)

for b in B:
if b[b.rfind(' ')+1: ].strip() in lookup_tb:
print 'b'
lovebeyondalways
2016-10-07 20:26:31 +08:00
@northisland 发送感谢
lovebeyondalways
2016-10-07 20:27:01 +08:00
@jigloo 感谢已发送
owt5008137
2016-10-07 20:28:21 +08:00
@northisland KMP 是单个匹配,多个匹配可以试试 AC 自动机。
不过规则文本的话更简单的优化方式茫茫多
orange88
2016-10-07 21:34:46 +08:00
用 pandas 可以搞定
lululau
2016-10-07 21:51:44 +08:00
grep -vFf <(cut -d ' ' -f 2 B) A
SlipStupig
2016-10-07 22:39:14 +08:00
python set.difference()

difference(...)
| Return the difference of two or more sets as a new set.
|
| (i.e. all elements that are in this set but not the others.)
mickeyandkaka
2016-10-08 15:47:32 +08:00
difflib

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/311003

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX