Необходимо проанализировать разделы текста из повторяющихся «группировок» ”Строк в файле

В Debian 8.5 не существует поддерживаемого и / или достаточного решения для оборудования.

2
08.07.2016, 05:01
3 ответа

Это не очень красиво, но я думаю, что это поможет.

awk -F":" 'BEGIN {RS=""};{$1="";$3=$5=$7=":";gsub(/(\ *)?:(\ *)?/,":");print $0}' test.txt |tr -s " "
0
27.01.2020, 22:19

Если вы не против завершающих пробелов, вы можете сказать:

awk -v RS='' -v OFS=':' -F'[:\n] *' '{ print $2, $4, $6, $9 " " $10 }'
0
27.01.2020, 22:19
awk '
        /Group:/                     {g=$2; next}
        /Source:/                    {s=$2; next}
        /Upstream interface:/        {u=$3; next}
        /Downstream interface list:/ {dflag=1; next}
        /^$/ {print g ":" s ":" u ":" d; g = s = u = d = ""; dflag = 0; }
        { if (dflag) { if (d == "") d = $1; else d = d " " $1} }
        END  {print g ":" s ":" u ":" d; g = s = u = d = ""; dflag = 0; }
'
  • Первые три строки программы awk довольно просты: захватите значения IP-адреса Multicast, IP-адреса источника, и интерфейса Upstream, когда вы видите соответствующие метки.
  • Четвертая строка устанавливает флаг, чтобы, после того, как мы увидели метку "Downstream interface list", мы знаем, что последующие (непустые) строки содержат интерфейсы Downstream.
  • Далее имеет смысл рассмотреть шестую строку: Если мы видели метку "Downstream interface list", собираем перечисленные значения, разделяя их пробелами.
  • Пятая и седьмая строки практически одинаковы: Когда вы дойдете до пустой строки или конца файла, распечатайте собранные на данный момент данные.
1
27.01.2020, 22:19

Теги

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