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

时间:2014-01-02 18:01:50

标签: linux bash awk grep

我使用file1作为file2的数据来源,现在我需要确保来自file1的每一行文字都出现某处 file2(并找出哪些行丢失,如果有的话)。可能需要注意的是,虽然file1每行有一个搜索字词,但file2中的任何位置可以包含在单词的中间。如果匹配不区分大小写也会有所帮助 - 如果file2中的文本在所有大写中都是偶数,则无关紧要。

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

2 个答案:

答案 0 :(得分:10)

if grep -Fqvf file2 file1; then
    echo $"There are lines in file1 that don’t occur in file2."
fi

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

答案 1 :(得分:3)

你可以尝试

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
}