Bash-读取两个文件并在文件中搜索
我有两个文件,file1和file2。我想访问file1中的每一行,然后搜索file2中的任何行是否存在于file1中。我正在使用下面的bash脚本,但它似乎不起作用。我应该换什么?(我不熟悉bash脚本)Bash-读取两个文件并在文件中搜索,bash,grep,Bash,Grep,我有两个文件,file1和file2。我想访问file1中的每一行,然后搜索file2中的任何行是否存在于file1中。我正在使用下面的bash脚本,但它似乎不起作用。我应该换什么?(我不熟悉bash脚本) #/bin/bash 读第1行时 做 echo$line1 读第2行时 做 如果grep-Fxq“line2”$1 然后 回声“发现” fi 完成
#/bin/bash
读第1行时
做
echo$line1
读第2行时
做
如果grep-Fxq“line2”$1
然后
回声“发现”
fi
完成<“$2”
完成<“$1”
注意:两个文件都是文本文件。使用
grep-f
grep -f file_with_search_words file_with_content
但是请注意,如果带有搜索词的文件包含空行,则所有内容都将匹配。但这可以通过以下方式轻松避免:
grep -f <(sed '/^$/d' file_with_search_words) file_with_content
您可以使用命令“comm”,它逐行比较两个已排序的文件
此命令显示file1和file2中的公用行
comm -12 file1 file2
此命令的唯一问题是,您必须先对文件进行排序,如下所示:
sort file1 > file1sorted
文件1
Line 1
Line 3
Line 6
Line 9
文件2
Line 3
Line 6
我会给你
Line 3
Line 6
这是文件2中的内容,它存在于文件1中
如果您希望忽略以下空格,则可以使用下面的空格
awk 'NR==FNR{con[$0];next} !/^$/{$0 in con;print $0}' file1 file2
将这两个文件的示例添加到您的问题中。@Cyrus:它们都是.txt文件。用“$line2”
替换”
。OP最好确保带有搜索词的文件没有任何空行。
awk 'NR==FNR{con[$0];next} $0 in con{print $0}' file1 file2
Line 3
Line 6
awk 'NR==FNR{con[$0];next} !/^$/{$0 in con;print $0}' file1 file2