Bash Grep|awk を実行して異なるファイルから結果を印刷する

Bash Grep|awk を実行して異なるファイルから結果を印刷する

IPアドレスを含むファイルが2つあります

1番目のファイル:

192.168.1.1:4.4.4.4
192.168.1.2:4.4.2.2
192.168.1.1:8.8.8.8
4.4.8.8:192.168.1.6
192.168.1.4:4.4.8.8

2番目のファイル:

4.4.2.2
4.4.8.8

ここで、ファイル 2 から各値を取得し、その値がファイル 1 に存在するかどうかを確認するスクリプトが必要です。値が存在する場合は、ファイル 1 から行全体を印刷する必要があります。

たとえば、上記の例から望ましい結果は次のとおりです。

192.168.1.2:4.4.2.2
4.4.8.8:192.168.1.6
192.168.1.4:4.4.8.8

答え1

grep -F -f file2.txt file1.txt

これにより、 の行が読み込まれfile2.txt、 で検索するためのパターンとして使用されますfile1.txt


2 番目の列の一致のみをチェックする場合は、次の awk コマンドを使用できます。

awk -F: 'NR==FNR{a[$0];next}$2 in a' file2.txt file1.txt

これは、各文字列を読み取りfile2.txt、それらを使用して配列 ( a) を作成します。次に、配列を調べてfile1.txt、列 2 の値がa配列内に存在するかどうかを確認します。存在する場合は、行全体が印刷されます。

答え2

2 番目のファイルをループし、最初のファイルから grep することができます。

for pattern in `cat file2.txt` ; do grep $pattern file1.txt ; done

コロンの後の末尾のみを一致させたい場合。

for pattern in `cat file2.txt` ; do grep :$pattern$ file1.txt ; done

関連情報