awk: извлечь строку из поля [закрыто]

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
2
10.09.2018, 15:18
3 ответа
Стандарт

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(), которое переносит функциональность команды sedsв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
8
27.01.2020, 21:50

Я бы попробовал

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);выполнить фактическую замену
4
27.01.2020, 21:50

Первый подпункт удаляет первые шестые символы в поле 3 и второй подпункт. удаляет все после двоеточия в том числе.

awk -F\| '{sub(/.{6}/,"",$3)sub(/:.*/,"")}1' OFS=\| file
0
27.01.2020, 21:50

Теги

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