
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