我有两个文件,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"
注意:这两个文件都是文本文件。
答案 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
答案 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