이 출력을 열에 넣으려고 하는데 누구든지 도와줄 수 있나요?
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"" }
}'
다른 호스트의 경우 필드 수를 수정해야 합니다.