Как использовать awk для извлечения данных из файла на основе содержимого другого файла?

По умолчанию ядро ​​Linux отвечает на любой запрос ARP для любого интерфейса, который оно имеет с любого интерфейса. Иногда такое поведение нежелательно.

Чтобы изменить это поведение, вам необходимо изменить некоторые параметры ядра с помощью:

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth1/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_filter
echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_filter

Вы также можете изменить это для всех интерфейсов на вашем компьютере с помощью:

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter

Посмотрите, что означают эти параметры сетевого ядра, и настройте их на свои специфические потребности, если эти последние команды не работают должным образом:

arp_ignore - INTEGER

Определите различные режимы для отправки ответов в ответ на полученные запросы ARP, которые разрешают локальные целевые IP-адреса:

  • 0 - (по умолчанию): ответить для любого локального целевого IP-адреса, настроенного на любом интерфейсе
  • 1 - ответить, только если целевой IP-адрес является локальным адресом, настроенным на входящем интерфейсе
  • 2 - ответить, только если целевой IP-адрес - это локальный адрес, настроенный на входящем интерфейсе, и оба с IP-адресом отправителя являются частью одной подсети на этом интерфейсе
  • 3 - не отвечать для локальных адресов, настроенных с помощью узла области действия, {{1} } отвечают только разрешения для глобальных адресов и адресов ссылок
  • 4-7 ​​- зарезервировано
  • 8 - do n ot answer для всех локальных адресов

Максимальное значение из conf / {all, interface} / arp_ignore используется , когда ARP-запрос получен на {interface}

arp_announce - INTEGER

Определите различные уровни ограничений для объявления локального IP-адреса источника из IP-пакетов в запросах ARP, отправленных на интерфейс:

  • 0 - (по умолчанию) Использовать любой локальный адрес, настроенный на любом интерфейсе
  • 1 - Старайтесь избегать локальных адресов, которые не входят в целевую подсеть для этого интерфейса.Этот режим полезен, когда целевые хосты, доступные через этот интерфейс, требуют, чтобы исходный IP-адрес в запросах ARP был частью их логической сети , настроенной на принимающем интерфейсе. Когда мы генерируем запрос , мы проверяем все наши подсети, которые включают целевой IP-адрес, и сохраняем исходный адрес, если он из такой подсети. Если такой подсети нет, мы выбираем адрес источника в соответствии с правилами для уровня 2.
  • 2 - Всегда использовать лучший локальный адрес для этой цели. В этом режиме мы игнорируем источник адрес в IP-пакете и попробуйте выбрать локальный адрес, который мы предпочитаем для переговоров с целевым хостом. Такой локальный адрес выбирается путем поиска основных IP-адресов во всех наших подсетях в исходящем интерфейсе , которые включают целевой IP-адрес. Если подходящий локальный адрес не найден, мы выбираем первый локальный адрес , который есть на исходящем интерфейсе или на всех других интерфейсах, в надежде получить ответ на наш запрос. и даже иногда вне зависимости от объявленного нами исходного IP-адреса.

Используется максимальное значение из conf / {all, interface} / arp_announce.

Увеличение уровня ограничения дает больше шансов для получения ответа от решенной цели, а уменьшение уровня объявляет более достоверную информацию об отправителе.

arp_filter - BOOLEAN

  • 1 - Позволяет иметь несколько сетевых интерфейсов в одной подсети и получать ответы на ARP для каждого интерфейса в зависимости от того, ядро будет перенаправлять пакет с IP-адреса ARP на этот интерфейс (поэтому вы должны использовать маршрутизацию на основе источника , чтобы это работало).Другими словами, он позволяет контролировать , какие карты (обычно 1) будут отвечать на запрос arp.

  • 0 - (по умолчанию) Ядро может отвечать на запросы arp адресами из других интерфейсов. Это может показаться неправильным, но обычно это имеет смысл , поскольку увеличивает вероятность успешного обмена данными. IP-адреса принадлежат всему хосту в Linux, а не конкретным интерфейсам. Только для более сложных настроек, таких как балансировка нагрузки - , такое поведение вызывает проблемы.

arp_filter для интерфейса будет включен, если хотя бы один из conf / {all, interface} / arp_filter установлен на TRUE, в противном случае он будет отключен

Вы можете увидеть более важные параметры сети в https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

4
05.05.2019, 23:00
3 ответа

Вы можете установить переменные типа RS отдельно для каждого файла. Например:

$ awk 'NR==FNR{a[$0];next} $1 in a' RS='\r?\n' title_list.txt RS='+++\r?\n' FS='\r?\n' ORS='+++\n' data.txt
article 1 title
article 1 body line 1
article 1 body line 2
+++
article 3 title
article 3 body line 1
article 3 body line 2
+++
article 4 title
article 4 body line 1
article 4 body line 2
article 4 body line 3
+++
4
27.01.2020, 20:52

В gawkвы можете использовать специальные блоки BEGINFILEи ENDFILEдля установки любых правил, которые вам нужны до/после чтения нового файла, например:

$ awk 'NR==FNR{a[$0]++;next}ENDFILE{RS="+++\n";FS="\n"}a[$1]{printf $0RT}' title_list.txt data.txt 

article 1 title
article 1 body line 1
article 1 body line 2
+++
article 3 title
article 3 body line 1
article 3 body line 2
+++
article 4 title
article 4 body line 1
article 4 body line 2
article 4 body line 3
3
27.01.2020, 20:52

Выполнено описанным ниже способом с использованием комбинации sed и awk

команда

 k=`awk '{print NR}' file2| sed -n '$p'`

for ((i=1;i<=$k;i++)); do j=`awk -v i="$i" 'NR==i{print $0}' file2`;  sed -n "/$j/,/+++/p" file1; done


output

for ((i=1;i<=$k;i++)); do j=`awk -v i="$i" 'NR==i{print $0}' file2`;  sed -n "/$j/,/+++/p" file1; done
article 1 title
article 1 body line 1
article 1 body line 2
+++
article 3 title
article 3 body line 1
article 3 body line 2
+++
article 4 title
article 4 body line 1
article 4 body line 2
article 4 body line 3
-1
27.01.2020, 20:52

Теги

Похожие вопросы