Сравните два файла и добавьте правило в iptables

У меня есть два файла.

A. Keys.txt

<string>
<string>
..
..

B. Hellos.txt

<string> <ip address> <ip address>
<string> <ip address> <ip address>
..
..

Я хочу выполнить задачу - если строка (column1) в hellos.txt находится в keys.txt затем добавьте правило брандмауэра, чтобы разрешить пакеты для этих IP-адресов.

Я пытался grep -v -F -x -f file1 file2 но я не могу получить правильный вывод.

РЕДАКТИРОВАТЬ: я обновил, чтобы использовать awk, однако я не могу добавить правила в iptables.

  1. Это распечатывает соответствующую строку

    sudo awk 'FNR==NR{a[$1];next}($1 in a){print}' keys.txt hellos.txt 
    
  2. Это пытается добавить правило в iptables, но безуспешно

    sudo awk 'FNR==NR{a[$1];next}($1 in a){iptables -I INCOMING -j -s$2 ALLOW}' keys.txt hellos.txt 
    

1 ответ

Решение

Как я уже упоминал в редактировании,

Следующая команда может быть использована для сопоставления общей строки в файлах

sudo awk 'FNR==NR{a[$1];next}($1 in a){print}' keys.txt hellos.txt 

Для дальнейшего улучшения производительности используйте awk -v OFS='\n' ' опция с каналом для печати IP-адреса в файл. Оттуда просто добавить правила в iptables.

awk 'FNR==NR{a[$1];next}($1 in a){print}' keys.txt hellos.txt | awk -v OFS='\n' '{ print $2, $3 }'> improved_address.txt
Другие вопросы по тегам