Ruby,如何将一个文件中的字符串与另一个文件中的字符串进行匹配,并打印匹配的字符串

Ruby,如何将一个文件中的字符串与另一个文件中的字符串进行匹配,并打印匹配的字符串,ruby,arrays,matching,Ruby,Arrays,Matching,我有两个文件。文件1: ruby,太棒了,太棒了 文件2: ruby-443-543-fx\n 惊人的-122-454-nx\n 你好-432-544-lx\n awesome-522-65-nx\n 如何运行搜索以将file1单词与file2行匹配(例如,从file1搜索惊奇以与惊奇-122-454-nx匹配)?然后,我需要打印匹配结果,如下所示: ruby-443-543-fx\n 惊人的-122-454-nx\n awesome-522-65-nx\n 如果您将文件1转换为每行一个要搜

我有两个文件。文件1:

ruby,太棒了,太棒了
文件2:

ruby-443-543-fx\n
惊人的-122-454-nx\n
你好-432-544-lx\n
awesome-522-65-nx\n
如何运行搜索以将file1单词与file2行匹配(例如,从file1搜索惊奇以与惊奇-122-454-nx匹配)?然后,我需要打印匹配结果,如下所示:

ruby-443-543-fx\n
惊人的-122-454-nx\n
awesome-522-65-nx\n

如果您将
文件1
转换为每行一个要搜索的单词列表,您只需使用友好的Unix-y搜索工具
grep

grep -f file1 file2
这肯定比在Ruby中构建的任何东西都要快

如果要从结果中删除换行符,可以使用
tr
命令,如下所示:

grep -f file1 file2 | tr -d "\n"
这里有一个方法:

words = File.read("file1.txt").strip.split(/,/)
words_regex = Regexp.union(words)

File.open("file2.txt").each do |line|
    puts line if line =~ words_regex
end
输出:

ruby-443-543-fx
神奇-122-454-nx
真棒-522-65-nx

但是,我需要的是为每个用逗号分隔的单词找到一个匹配项(例如:文件1中的ruby)并将其与文件2匹配。并打印出匹配行的输出。**I包括\n以显示文件2为3行。而file1只是一行。我仍然认为
grep
是一条路要走。请尝试以下操作:
grep“$(cat file1 | tr”,“\n”)“file2
。不过,这只适用于一定的限制(对于文件1,可能至少达到260 KB)。谢谢您的回答。如果我的第一个文件包含这样的内容:hii-mee ruby,令人惊讶,令人敬畏你的答案正是我想要的,但是如果我不想要hii-mee-?我该如何摆脱它们?这对你发布的内容是一个重大的改变。您需要确定如何解析单词以提取所需内容。你会在最后一个'-'之前放弃一切吗?如果是,请将
.map{| w | w.sub(/^.*-/,'')}
添加到第一行。