표 형식으로 출력하기

표 형식으로 출력하기

Perl 스크립트에서 snmpwalk를 수행하고 index 및 desc인 경우 같은 줄에 각 호스트 이름이 있는 경우와 같이 일부 상관 관계에 대한 출력을 테이블에 넣는 것이 가능하다면 bash에 스크립트가 있지만 출력이 있습니다. 내가 원하는 협회, 그래서 당신의 도움이 필요합니다

#!/bin/bash
Rep_Scripts='/home/scripts'
out_file='/home/scripts/out_file'
rm -rf $Rep_Scripts/out_file

for i in `cat $Rep_Scripts/IP_ALU_LIST.txt | awk '{print}'`
do
read hostname ip <<< $(echo $i |sed 's/;/ /')


        echo "${hostname} ==> ${ip} If_Name" >> out_file
        snmpwalk -v2c -c ${ip} OID>> out_file
        echo "${hostname} ==> ${ip} Global_If_Index" >> out_file
         snmpwalk -v2c -c ${ip} OID >>  out_file
        echo "${hostname} ==> ${ip} If_Statut" >> out_file
        snmpwalk -v2c -c  ${ip} OID >> out_file


done

IP_ALU_LIST.txt에 있습니다.

router2;89.100.12.100
router3;100.100.100.100

답변1

먼저 질문을 재구성하세요.

각 IP/호스트에 대해 snmpwalk에서 데이터를 입력하고 각 OID에 대한 테이블을 출력하는 Perl 스크립트를 작성하는 방법.

둘째, 귀하의 예제 snmpwalk명령은 의미가 없습니다. OID변수라면 이것이 의미가 있을 수 있습니다 . 아마도 snmpwalk -v2 -c public ${ip} ${OID}를 사용하려고 할 것입니다.

다음을 수행할 수 있습니다.

#!/usr/bin/env perl -w
# Invoke via $0 <ip-address-file> <OIDs ... >
$input_file=shift @ARGV;
$oids=join(" ",@ARGV);
$oids gt '' || die "Please provide at least one OID for snmpget to fetch"

format STDOUT_TOP = 
@<<<<<<<<<<<  @>>>>>>>>>>>>>>>>>>>
$ip,$hostname
.
format STDOUT = 
@<<<<<<<<<<<<<<<<<<<<< @||||||||||||| @>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$oid,$type,$value
.
$^L="\n\n\n";

# parse inputfile
open(IPFILE,$input_file) or die "Cannot open $input_file";
while (my $host=<IPFILE>) { 
  chomp $host;
  my ($hostname,$ip) = split(";",$host,2);

  open(SNMP,"snmpget -v2 -cpublic $ip $oids |") or die "Cannot run snmpwalk"
  print "$hostname => $ip :\n";
  while ($_ = <SNMP>) { 
       if ( ($oid,$type,$value) = /^(.*?) = ([^:]+): (.*)$/ ) { 
          write
       } else {
          print STDERR  "Could not parse this output:\n  $_";
       }
  }
  $- = 0;
}

snmpget각 OID에 대해 한 줄이 출력됩니다. 바라보다http://linux.die.net/man/1/perlformPerl "형식" 및 관련 write명령에 대한 추가 정보. $^L페이지 구분 기호를 기존 페이지 팝 문자(CTRL-L) 대신 세 개의 개행 문자로 설정합니다 . 이 $- = 0;비트는 기본적으로 다음에 "write"가 호출될 때 새 페이지(새 헤더 포함)를 강제로 생성합니다. 다음에 호출되면 새로운 값이 나타납니다 $hostname.$ip

관련 정보