Como dijo la otra persona, los registros A requieren direcciones. Pero puede usar CNAME como creo que está intentando en su ejemplo.
wwww IN A 192.168.1.10
ftp IN CNAME wwww
awk
не очень хорош в извлечении данных из полей на основе шаблонов. Некоторые варианты включают:
split()
для разделения текста на массив на основе указанных разделителей. match()
, который устанавливает переменные RSTART
и RLENGTH
для указания места совпадения, а затем использует subtr()
для извлечения совпадающей части. Так вот:
awk -F'|' -v OFS='|' '
split($3, a, /[=:]/) >= 2 {print $1, $2, a[2]}' < file.txt
So возвращает часть между первым и вторым вхождением =
или :
в $3
.
Или:
awk -F'|' -v OFS='|' '
match($3, /=[^:]*/) {
print $1, $2, substr($3, RSTART+1, RLENGTH-1)
}' < file.txt
GNU awk
имеет расширение gensub()
, которое переносит функциональность команды sed
s
вawk
:
gawk -F'|' -v OFS='|' '
$3 ~ /=/ {
print $1, $2, gensub(/^[^=]*=([^:]*).*/, "\\1", 1, $3)
}' < file.txt
Ищет =
, за которым следует любое количество не-:
s, и извлекает часть после =
. Проблема с gensub()
заключается в том, что вы не можете легко сказать, была ли подстановка успешной или нет, поэтому сначала проверяется, что $3
содержит =
.
Сsed
:
sed -n 's/^\([^|]*|[^|]*|\)[^=|]*=\([^:|]*\).*/\1\2/p' < file.txt
Сperl
:
perl -F'[|]' -lane 'print "$F[0]|$F[1]|$1" if $F[2] =~ /=([^:]*)/' < file.txt
Я бы попробовал
awk -F\| 'BEGIN {OFS="|";}
{col=index($3,":");
equ=index($3,"=");
$3=substr($3,equ+1,col-equ-1);
print ; }' se
где
-F\|
указать awk использовать |
в качестве разделителя ввода equ=index($3,"=");
получить индекс = в третьем поле $3=substr($3,equ+1,col-equ-1);
выполнить фактическую замену Первый подпункт удаляет первые шестые символы в поле 3 и второй подпункт. удаляет все после двоеточия в том числе.
awk -F\| '{sub(/.{6}/,"",$3)sub(/:.*/,"")}1' OFS=\| file