Linux 检查一个文件中的所有行是否存在于另一个文件中

Linux 检查一个文件中的所有行是否存在于另一个文件中,linux,bash,awk,grep,Linux,Bash,Awk,Grep,我使用file1作为file2的数据源,现在我需要确保file1中的每一行文本都出现在file2中的某个位置(并找出缺少的行,如果有)。很重要的一点是要注意,虽然代码>文件1 每行有一个搜索项,但是术语可以出现在 Fiel2中的任何地方,包括在一个单词的中间。如果匹配不区分大小写,也会有所帮助-无论file2中的文本是否在所有大写字母中,只要它在那里就行 file1中的行包括空格和各种其他特殊字符,如--您可以尝试 awk -f a.awk file1 file2 其中a.awk为 BEGIN

我使用
file1
作为
file2
的数据源,现在我需要确保
file1
中的每一行文本都出现在
file2
中的某个位置(并找出缺少的行,如果有)。很重要的一点是要注意,虽然代码>文件1 每行有一个搜索项,但是术语可以出现在 Fiel2中的任何地方,包括在一个单词的中间。如果匹配不区分大小写,也会有所帮助-无论
file2
中的文本是否在所有大写字母中,只要它在那里就行

file1
中的行包括空格和各种其他特殊字符,如
--

您可以尝试

awk -f a.awk file1 file2
其中
a.awk

BEGIN { IGNORECASE=1 }
NR==FNR {
    a[$0]++
    next
}
{
    for (i in a) 
        if (index($0,i)) 
            delete a[i]
}

END {
    for (i in a)
        print i
}
Grep选项意味着:

-F, --fixed-strings       PATTERN is a set of newline-separated fixed strings
-f, --file=FILE           obtain PATTERN from FILE
-v, --invert-match        select non-matching lines
-q, --quiet, --silent     suppress all normal output

嗯,出于某种原因,这对我创建的所有短测试文件都非常有效,但对我需要它的两个大文件却不能正常工作。它还输出
file2
@user2044638中的一些行。您是否有它输出的
file2
中的行的示例?抱歉,我没有真正注意到,因为我看到了一些我知道在
file2
中的行,所以它输出了
file1
中的所有行(只是顺序不同)。至于一些示例行,大多数行似乎都没有什么特别之处,大部分是互联网链接,有些只是一个单词。@user2044638-Hmm。。但是它在短测试文件中工作得很好,-w标志将使您更接近于匹配精确的行,正如问题所述。您仍然必须假设匹配的任何行都不包含也属于单词的子字符串
-F, --fixed-strings       PATTERN is a set of newline-separated fixed strings
-f, --file=FILE           obtain PATTERN from FILE
-v, --invert-match        select non-matching lines
-q, --quiet, --silent     suppress all normal output