2つのファイルがあり、そのうちの1つに値があり、別のファイルでその値を見つける必要があります。すべての単一値をgrepingする代わりに、最初のファイルを使用して2番目のファイルで検索します。
つまり
ファイル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
出力をさらに制御する必要がある場合は、シェルループを使用できます。
$ while read pat; do
grep -q "$pat" file1 && echo "file1 contains $pat";
done < file2
file1 contains alweya.com
2番目の方法を使用すると、見つかったパターンごとに別々のメッセージを印刷できますが、大きなファイルでは速度がはるかに遅くなります。