У меня есть 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