2011-04-27 92 views
3

我想查找包含保存在不同文件列中的任何字符串的文件的每一行。使用awk输出的每一行作为grep模式

我已经试过
grep "$(awk '{ print $1 }' file1.txt)" file2.txt
但只是在其整体输出FILE2.TXT。

我知道我以前在这个网站上发现了一个模式,但我找不到这个问题了。

+0

的命令做什么它应该。 我的问题是file1有一个空白行,它将模式“”发送给grep,导致它找到file2中的每一行。 – sans 2011-04-27 19:57:31

回答

6

我在OP的评论中看到,也许问题不再是问题。但是,下面的细微修改将处理空行情况。只需添加一个检查,以确保该行至少有一个字段:

grep "$(awk '{if (NF > 0) print $1}' file1)" file2 

如果与模式的文件就是一组,每行模式,那么它的一个更简单的版本是:

grep -f file1 file2 

这会导致grep使用file1中的行作为模式。

2

没有必要使用grep当你在OP具有awk

awk 'FNR==NR&&NF{a[$0];next}($1 in a)' file2 file1