在2个列表文件上使用grep

时间:2015-03-25 12:52:20

标签: list file design-patterns grep

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

abc
bcd
def

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

/prod/users/abc/username/filename1.dat
/prod/users/abc/username/filename2.dat
/prod/users/abc/username/filename3.dat

我要grep

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

2 个答案:

答案 0 :(得分:0)

你错过了<{p>中的cat

for j in `file1`

将其更改为

for j in `cat file1`

答案 1 :(得分:0)

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

也许你的意思是这样的:

#!/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