Сравните n никакие из значений столбцов между каждой записью в 2 файлах и добавьте данные от файла 2 до файла 1

/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -d 10.13.235.42 -j DNAT --to-destination 209.208.27.224:27279

  • Работает с таблицей nat.

  • Применяет правило к таблице PREROUTING, так что решения, принятые в этом правиле, могут повлиять на то, какое решение по маршрутизации будет принято.

  • Строго для соединений с портом 80 на 10.13.235.42, который предположительно является одним из IP-адресов этой машины.

  • Установите новый пункт назначения в качестве порта 27279 на 209.208.27.224 . Если 10.13.235.42 является IP-адресом этой машины, то это необходимо для того, чтобы ядро не думало, что это конечный пункт назначения для трафика. На данный момент IP-адрес назначения в входящем пакете был изменен.

  • -j DNAT просто означает, что мы используем NAT для назначения, а не скрываем источник соединения от места назначения (которым был бы SNAT).

/sbin/iptables -t nat -A POSTROUTING -p tcp --dport 27279 -j MASQUERADE

  • Работает с таблицей nat после того, как было принято решение о маршрутизации.

  • Совпадает с любыми tcp-пакетами, предназначенными для порта 27279 на любой IP-адрес и с него. Полагаю, идея здесь в том, что нам не нужно быть слишком конкретными, так как это необычный номер порта.

  • Говорит кернелу на MASQUERADE, что означает, что пакеты модифицируются, чтобы затемнить либо источник, либо пункт назначения. Это позволяет получить ответ в том же виде, в каком он был получен.

1
06.01.2019, 15:13
1 ответ

Это типичная задача для awk. Вот одно из возможных решений:

awk '
NR==FNR {
    match($0,/.*\$/)
    pref = substr($0,RSTART,RLENGTH)
    rest = substr($0,RSTART+RLENGTH)
    suff = substr(rest, index(rest,"|"))
    suffixes[pref] = suff
    next
}
{
    match($0,/.*\$/)
    prefix = substr($0,RSTART,RLENGTH)
    match($0,/.*\$[0-9]+|/)
    data = substr($0,RSTART,RLENGTH)
    if (prefix in suffixes)
        print data suffixes[prefix]
}
' file2 file1

где file1 - это тот, который в вашем вопросе назван "входным файлом", а file2 - тот, который в вашем вопросе назван "другим файлом". (Обратите внимание на порядок следования файлов в списке)

Пояснение:

Первый командный блок выполняется при считывании первого файла file2; это достигается с помощью условия NR==FNR, которое является истинным только при считывании первого файла. Второй командный блок выполняется только для второго файла file1 (из-за директивы next в первом командном блоке). Первый блок извлекает префикс префикса и суффикс суффикс , а суффикс [префект] = суффикс запоминает для каждого префикса соответствующий суффикс; это необходимо для обращения к этим данным во втором блоке. Во втором блоке фактически выполняются аналогичные команды по извлечению префикса, а также по его использованию для получения из хранимых суффиксов нужного суффикса. Есть только одно отличие, необходимо также сохранить номер после символа # в составе новых данных префикса, чтобы была выполнена вторая операция совпадения -; чтобы отличить префикс, необходимый для доступа к массиву суффиксов -, от префикса, который нужен в составе результирующих данных.

1
27.01.2020, 23:50

Теги

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