выбрать списки из необработанных данных в bash или просто отформатировать выходное имя list_name с последующим содержимым списка - PullRequest
0 голосов
/ 07 марта 2019

необработанные данные имеют «пул pool_name», за которым следует 0-н количество строк «member Произвольный_мембер_ip» Возможно ли получить списки в bash? Я пробовал некоторые условные условия, пока не устал. Спасибо за помощь заранее.

     pool string_name_1
     member 172.0.0.1
     member 172.0.1.1
     pool string_name_2
     member 172.2.1.2
     member 172.0.2.2
     pool string_name_3
     member 172.2.1.3
     member 172.3.2.3
     member 172.25.25.3
     member 172.25.40.3
     pool string_name_4
     pool string_name_5
     member 5.5.50.5

ожидаемый результат

     string_name_1 172.0.0.1 172.0.1.1
     string_name_2 172.2.1.2 172.0.2.2
     string_name_3 172.2.1.3 172.3.2.3 172.25.25.3 172.25.40.3
     string_name_4 
     string_name_5 5.5.50.5

Ответы [ 2 ]

3 голосов
/ 07 марта 2019

С bash вы можете написать

unset line
while read -r key value; do
    case $key in
        pool)   [[ $line ]] && echo "$line"; line=$value ;;
        member) line+=" $value" ;;
    esac
done < file
echo "$line"

Та же техника в awk для увеличения производительности:

awk '
    $1 == "pool"   {if (line) print line; line = $2} 
    $1 == "member" {line = line OFS $2} 
    END {print line}
' file
3 голосов
/ 07 марта 2019

Это меняет значение по умолчанию RS на pool, поэтому каждая запись теперь отделяется pool.gsub() используется для удаления строки member из вывода.

awk -v RS='pool' '{$1=$1;gsub(/member/,"")}1' inputfile

string_name_1  172.0.0.1  172.0.1.1
string_name_2  172.2.1.2  172.0.2.2
string_name_3  172.2.1.3  172.3.2.3  172.25.25.3  172.25.40.3
string_name_4
string_name_5  5.5.50.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...