데이터를 열에 넣기

데이터를 열에 넣기

이 출력을 열에 넣으려고 하는데 누구든지 도와줄 수 있나요?

Routeur 2 ==> 89.89.156.112 If_Name
:vRtrIfName.1.1
:vRtrIfName.1.2
Routeur 2 ==> 89.89.156.112 If_index
546
789
Routeur 2 ==> 89.89.156.112 If_status
1
2

설계 출력:

routerName  IPadd          If_Name           If_index    If_status

Routeur 2   89.89.156.112 :vRtrIfName.1.1    546         1
Routeur 2   89.89.156.112 :vRtrIfName.1.2    789         2

답변1

Perl 솔루션, 사용텍스트::테이블좋은 출력 형식을 얻으려면:

#!/usr/bin/perl
use warnings;
use strict;

use Text::Table;

my %t;
my ($router, $ip, $column);
while (<>) {
    if (/==>/) {
        ($router, $ip, $column) = /(.*) ==> ([0-9.]+) (\S+)/;
    } else {
        chomp;
        push @{ $t{$router}{$ip}{$column} }, $_;
    }
}

my @columns = qw( If_Name If_index If_status );
my $tt = 'Text::Table'->new('routerName', 'IPadd', @columns);
for my $router (keys %t) {
    for my $ip (keys %{ $t{$router} }) {
        for my $i (0 .. $#{ $t{$router}{$ip}{ $columns[0] } }) {
            my @values = map $t{$router}{$ip}{$_}[$i], @columns;
            $tt->add($router, $ip, @values);
        }
    }
}

print $tt;

답변2

이상한 솔루션

awk '
/Routeur/{
    i=0;
    host[$1" "$2]=$4;
    k++;
    param[k]=$5;
    next }
{
    i++
    Data[k,i]=$0
}
END{ 
    printf("%-12s%-15s","routerName","IPadd");
    for(j in param)
        printf("%-17s",param[j]);
    print "\n";
    for(h in host)
        for(i=1;i<3;i++){
            printf("%-12s%-15s",h,host[h]);
            for(j in param)
                printf "%-17s", Data[j,i];
            print""     }
   }'

다른 호스트의 경우 필드 수를 수정해야 합니다.

관련 정보