【发布时间】:2014-03-15 10:49:31
【问题描述】:
a.txt 包含单词,b.txt 包含字符串。
我想知道 b.txt 中有多少字符串以 a.txt 中的单词开头或结尾。
我在 GREP-s 用户手册中找到了这个: " 假设我要搜索整个单词,而不是单词的一部分? grep -w '你好' * 仅搜索作为完整单词的“hello”实例;它不匹配“奥赛罗”。如需更多控制,请使用“\”来匹配单词的开头和结尾。例如:
grep 'hello\>' *
只搜索以‘hello’结尾的词,所以它匹配‘Othello’这个词。”
但我不知道如何修改它来解决我的问题。
示例:a.txt
apple
peach
potato
green
big
pink
b.txt
greenapple
bigapple
rottenapple
pinkpeach
xxlpotatoxxx
输出
ends.txt
3 apple greenapple bigapple rottenapple
1 peach pinkpeach
starts.txt
1 green greenapple
1 big bigapple
1 pink pinkpeach
但由于 a.txt 包含大约 50K 行,而 b.txt 包含超过 100M 行,我认为 grep 是唯一的解决方案。
【问题讨论】:
-
你可以编写一个简单的 bash 脚本,循环遍历
a.txt并为每一行执行一个 grep -
因为你想分别匹配 first 和 last 词,你会使用
grep '^hello'和grep 'hello$',但既然你想要每个搜索词的出现次数,您仍然必须循环处理a.txt中的词,从而针对100M 行文件调用grep50K 次。