Bash Grep|awk и вывод результатов из разных файлов

Bash Grep|awk и вывод результатов из разных файлов

У меня есть 2 файла, которые содержат IP-адреса.

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

Теперь мне нужен скрипт, который берет каждое значение из файла 2nd и проверяет, присутствует ли это значение в файлах 1st. Если значение присутствует, он должен вывести всю строку из файла 1st.

Например, желаемый результат из примера выше:

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

Связанный контент