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

时间:2016-05-05 15:45:59

标签: bash grep

我有两个文件,file1和file2。我想从file1到达每一行,然后搜索file1中是否存在file2中的任何行。我使用以下bash脚本,但它似乎没有工作。我应该改变什么? (我是bash脚本的新手。)

#!/bin/bash

while read line1      
do           
    echo $line1
    while read line2
    do
        if grep -Fxq "line2"  "$1"
        then 
            echo "found"
        fi
    done < "$2"             
done < "$1"

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

3 个答案:

答案 0 :(得分:2)

使用grep -f

grep -f file_with_search_words file_with_content

但请注意,如果file_with_search_words包含空行,则所有内容都将匹配。但这可以通过以下方式轻松避免:

grep -f <(sed '/^$/d' file_with_search_words) file_with_content

从手册页:

   -f FILE, --file=FILE
      Obtain  patterns  from  FILE, one per line.  If this option is used
      multiple times or is combined with the -e (--regexp) option, search
      for all patterns given.  The empty file contains zero patterns, and
      therefore matches nothing.

答案 1 :(得分:0)

您可以使用命令&#34; comm&#34;,它逐行比较两个已排序的文件

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

comm -12 file1 file2

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

sort file1 > file1sorted

http://www.computerhope.com/unix/ucomm.htm

答案 2 :(得分:0)

档案1

Line 1
Line 3
Line 6
Line 9

文件2

Line 3
Line 6


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

会给你

Line 3
Line 6

这是文件2中存在于file1中的内容。

如果您希望忽略下面的空格,那么

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