List 在2个列表文件上使用grep

List 在2个列表文件上使用grep,list,file,design-patterns,grep,List,File,Design Patterns,Grep,我有两个文件 文件1包含我需要grep的模式列表 例如: file2包含文件名和绝对路径 例如: 我得走了 abc in /prod/users/abc/username/filename1.dat bcd in /prod/users/abc/username/filename2.dat def in /prod/users/abc/username/filename3.dat 这里有谁能帮我翻译一下UNIX代码吗。 以下方法不起作用 for i in `cat file2` do fo

我有两个文件 文件1包含我需要grep的模式列表 例如:

file2包含文件名和绝对路径 例如:

我得走了

abc in /prod/users/abc/username/filename1.dat
bcd in /prod/users/abc/username/filename2.dat
def in /prod/users/abc/username/filename3.dat
这里有谁能帮我翻译一下UNIX代码吗。 以下方法不起作用

for i in `cat file2`
do
  for j in `file1`
  do
  cat -n $i| grep $j >> file_final.txt
  done
done

您在中缺少一个
cat

for j in `file1`
换成

for j in `cat file1`

嵌套循环使它看起来像是在搜索每个文件上的每个模式

也许你的意思更像这样:

#!/bin/bash
i=0
patterns=`cat file1`
values=(`cat file2`)
for pattern in ${patterns}
do
  cat -n ${values[i]} | grep $pattern >> file_final.txt
  ((i++))
done
顺便说一句,grep提供了一个
-n
选项,因此您不需要
cat
导出您的文件;您只需浏览一下即可:

grep $pattern -n ${values[i]} >> file_final.txt

避免使用旧的和不推荐使用的back tics,请使用以下括号:
表示$(cat file2)中的i
#!/bin/bash
i=0
patterns=`cat file1`
values=(`cat file2`)
for pattern in ${patterns}
do
  cat -n ${values[i]} | grep $pattern >> file_final.txt
  ((i++))
done
grep $pattern -n ${values[i]} >> file_final.txt