我有 2 个文件,其中一个文件中有一些值,我需要在另一个文件中找到它们。我将使用第一个文件在第二个文件中进行查找,而不是对每个单个值进行 grep
IE
文件1
ns1.cloudns.net. -17554 IN A 85.159.233.17
ns1.cloudns.net. -17554 IN AAAA 2a00:1768:1001:9::1
www.alweya.com. -335336 IN A 192.69.217.246
文件2
alweya.com
输出 - 文件 1 包含www.alweya.com
答案1
while read line
do
msg="File 1 contains "
msg2="$msg$(grep "$line" file1.txt | cut -d ' ' -f 1)"
if [ ${#msg2} -ne ${#msg} ]; then
echo $msg2
fi
done < file2.txt
文件1
ns1.cloudns.net. -17554 IN A 85.159.233.17
ns1.cloudns.net. -17554 IN AAAA 2a00:1768:1001:9::1
www.alweya.com. -335336 IN A 192.69.217.246
文件2
alweya.com
答案2
这取决于您到底想做什么。最简单的方法是使用grep
,传递模式文件-f
:
$ grep -f file2 file1
www.alweya.com. -335336 IN A 192.69.217.246
如果需要更详细地控制输出,可以使用 shell 循环:
$ while read pat; do
grep -q "$pat" file1 && echo "file1 contains $pat";
done < file2
file1 contains alweya.com
第二种方法允许您为找到的每个模式打印单独的消息,但在较大的文件上会慢得多。