Bash Grep|awk 並列印不同檔案的結果

Bash Grep|awk 並列印不同檔案的結果

我有 2 個包含 IP 位址的文件

第一個文件:

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

第二個文件:

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


如果您只想檢查第二列中的符合項,可以使用以下 awk 指令:

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

這將從中讀取每個字串並用它們file2.txt創建一個數組( )。a然後它將遍歷file1.txt並檢查數組中是否存在第 2 列中的值a。如果是,則將列印整行。

答案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

相關內容