
求教大神 文本 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
1 lovebeyondalways OP 想做的是如果文本 A 有 ip 存在于文本 B 就将它输出 |
2 zhidian 2016-10-07 19:58:37 +08:00 选你能用的编程语言, 读入文本 A, 扫描出所有的 IP, 存入 dict 中, 读入文本 B, 依次扫描, 遇到 ip, 如果 ip 在 dict 中, 则输出之. that's easy. |
3 zhuangzhuang1988 2016-10-07 20:03:39 +08:00 |
4 northisland 2016-10-07 20:04:00 +08:00 N ( A )数量个 String Searching 问题(Substring) (我记得最佳解法是用 KMP 算法) 欢迎拍砖~ |
5 northisland 2016-10-07 20:06:59 +08:00 后悔了,这是规则文本。 提取 IP ,搜索 IP 查找表,就可以了。 |
6 ldbC5uTBj11yaeh5 2016-10-07 20:08:50 +08:00 comm -12 a.txt <(awk '{print $2}' b.txt) |
7 ldbC5uTBj11yaeh5 2016-10-07 20:10:19 +08:00 靠,看错了,居然是 python 节点。 (要啥自行车,用 shell 比 python 要快哒。) |
8 lovebeyondalways OP @jigloo 大哥 不好意思 我需要 Python 哈哈 |
9 lovebeyondalways OP @jigloo 因为这段代码要 放进项目用 |
10 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 |
11 northisland 2016-10-07 20:21:42 +08:00 via Android lookup_tb = dict( (e, 1) for e in A) for b in B: if b[b.rfind(' ')+1: ].strip() in lookup_tb: print 'b' |
12 lovebeyondalways OP @northisland 发送感谢 |
13 lovebeyondalways OP @jigloo 感谢已发送 |
14 owt5008137 2016-10-07 20:28:21 +08:00 via Android @northisland KMP 是单个匹配,多个匹配可以试试 AC 自动机。 不过规则文本的话更简单的优化方式茫茫多 |
15 orange88 2016-10-07 21:34:46 +08:00 via Android 用 pandas 可以搞定 |
16 lululau 2016-10-07 21:51:44 +08:00 grep -vFf <(cut -d ' ' -f 2 B) A |
17 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.) |
18 valuedlute 2016-10-08 15:47:32 +08:00 difflib |