Bash-读取两个文件并在文件中搜索

Bash-读取两个文件并在文件中搜索,bash,grep,Bash,Grep,我有两个文件,file1和file2。我想访问file1中的每一行,然后搜索file2中的任何行是否存在于file1中。我正在使用下面的bash脚本,但它似乎不起作用。我应该换什么?(我不熟悉bash脚本) #/bin/bash 读第1行时 做 echo$line1 读第2行时 做 如果grep-Fxq“line2”$1 然后 回声“发现” fi 完成

我有两个文件,file1和file2。我想访问file1中的每一行,然后搜索file2中的任何行是否存在于file1中。我正在使用下面的bash脚本,但它似乎不起作用。我应该换什么?(我不熟悉bash脚本)

#/bin/bash
读第1行时
做
echo$line1
读第2行时
做
如果grep-Fxq“line2”$1
然后
回声“发现”
fi
完成<“$2”
完成<“$1”

注意:两个文件都是文本文件。

使用
grep-f

grep -f file_with_search_words file_with_content
但是请注意,如果带有搜索词的
文件包含空行,则所有内容都将匹配。但这可以通过以下方式轻松避免:

grep -f <(sed '/^$/d' file_with_search_words) file_with_content
您可以使用命令“comm”,它逐行比较两个已排序的文件

此命令显示file1和file2中的公用行

comm -12 file1 file2
此命令的唯一问题是,您必须先对文件进行排序,如下所示:

sort file1 > file1sorted
文件1

Line 1
Line 3
Line 6
Line 9
文件2

Line 3
Line 6

我会给你

Line 3
Line 6
这是文件2中的内容,它存在于文件1中

如果您希望忽略以下空格,则可以使用下面的空格

awk 'NR==FNR{con[$0];next} !/^$/{$0 in con;print $0}' file1 file2

将这两个文件的示例添加到您的问题中。@Cyrus:它们都是.txt文件。用
“$line2”
替换
。OP最好确保带有搜索词的
文件没有任何空行。
awk 'NR==FNR{con[$0];next} $0 in con{print $0}' file1 file2
Line 3
Line 6
awk 'NR==FNR{con[$0];next} !/^$/{$0 in con;print $0}' file1 file2