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

use*_*638 11 linux bash awk grep

我用作file1数据源,file2现在我需要确保每一行文本都file1出现在某处file2(并找出哪些行丢失,如果有的话).可能需要注意的是,尽管file1每行有一个搜索项,但这些术语可以出现在单词中间的任何位置file2.如果匹配不区分大小写也会有所帮助 - 如果文本中的文本file2甚至是全部大写,则无关紧要.

在该线file1包含空格和各种其他特殊字符一样--.

Dmi*_*rov 10

if grep -Fqvf file2 file1; then
    echo $"There are lines in file1 that don’t occur in file2."
fi
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


Håk*_*and 4

你可以试试

awk -f a.awk file1 file2
Run Code Online (Sandbox Code Playgroud)

哪里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
}
Run Code Online (Sandbox Code Playgroud)