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

我使用file1作为file2的数据源,现在我需要确保file1中的每一行文本都发生在file2 某处 (并找出哪些行是丢失的,如果有的话)。 重要的是要注意,虽然file1每行只有一个search项,但是这些项可能发生在file2 任何地方 ,包括在一个词的中间。 如果匹配是不区分大小写的,那么也会有所帮助 – 如果file2的文本是全部大写的,那么只要它在那里就没有关系。

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

 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 

你可以试试

 awk -f a.awk file1 file2 

哪里是

 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 }