while IFS= read -r l; do
read -r -a A <<<"$l"
case $l in
'pos'[\ \ ]* )
echo "${A[@]:0:2}"
C=("${A[@]:1}")
;;
* )
p=0 x=${A[0]}
for e in "${A[@]:1}"; do
echo "$x ${C[$p]} $e"
((p++))
done
;;
esac
done < yourfile
sed -E '
/\n/bloop
y/\t/ /;s/ +/ /g;s/^ +//;s/ +$//
1{
h
s/ /\n/2
x
s/ /\n/;s/.*\n//
x
s/\n.*//
b
}
G;s/\n/ &/
:loop
# 1 2 3 4 5
s/^(\S+ )(\S+) (.*)(\n)(\S+) ?/\1\5 \2\4\1\3\4/
/\n$/{
/\n.*\n/!d
}
P
/\n.*\n/D
tloop
' yourfile
pos COL1
18691441 COL1 C
18691441 COL2 A
18691441 COL3 G
18691572 COL1 G
18691572 COL2 C
18691572 COL3 G
18691620 COL1 A
18691620 COL2 T
18691620 COL3 G
18691716 COL1 C
18691716 COL2 G
18691716 COL3 C
do-while
, в котором на каждой итерации мы переставляем поля так, как показано, чтобы имя столбца вместе со значением выводилось на печать. Мы останавливаемся, когда видим строку, имеющую \n
в конце И это единственный символ \n
, оставшийся в строке. В противном случае мы просто обрываем начальную часть и возвращаемся к началу цикла. Для настройки исходного запроса, отличного от первичного интерфейса сервера, вы используете query-source
в параметрах BIND.
Настройка такова, что с этого IP отправляются только запросы, инициированные сервером / демоном.
Помните, что , если это внутренний / RFC 1918 частный адрес , вам придется преобразовать его через NAT при выходе на внешнюю территорию.
Согласно моему серверу, в /etc/bind/ named.conf.options
:
options {
query-source address X.X.X.X;
}
где X.X.X.X - ваш IP-адрес.
Другой вариант - использовать службу динамического DNS, зарегистрировать там свой IP-адрес и выполнять правила на основе имени DNS. Конечно, есть небольшое неудобство, связанное с необходимостью создания сценария, который будет помещен в качестве ловушки DHCP для повторного применения правил при изменении IP-адреса.
Комментарий @ roaima привел меня в правильное русло.
Мое правило POSTROUTING iptables выглядит так:
-t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to <мой общедоступный IP-адрес>
Просто добавьте правило выше этого, чтобы исключить собственный IP-адрес маршрутизатора исправил все:
-t nat -I POSTROUTING 1 -s 192.168.1.1 -j ACCEPT
@roaima, если вы хотите отправить сообщение в качестве ответа, я дам вам голос за.